gpt4 book ai didi

swift - 如何连接 UITableViewCell 按钮来执行 UITableView 功能?

转载 作者:行者123 更新时间:2023-11-28 12:16:56 25 4
gpt4 key购买 nike

我有一个应用程序,它使用一个包含原型(prototype)单元格的 tableView。这个原型(prototype)单元格包含一些标签和一个按钮(连接到该单元格的 UITableViewCell 文件)。如果不清楚,这就是我的意思:

class ContactsCell: UITableViewCell { //this custom cell is used as the prototype cell for the tableView

@IBOutlet weak var firstNameLabel: UILabel!

@IBOutlet weak var lastNameLabel: UILabel!

@IBOutlet weak var numberLabel: UILabel!

@IBOutlet weak var indexPathRowLabel: UILabel!

@IBOutlet weak var replaceContactButtonUI: UIButton!

@IBAction func replaceContactButtonTapped(_ sender: Any) {
//THIS is the button in question
}

这样做的原因是因为我希望 tableView 中的每个单元格都具有所有这些标签(和按钮),但每一行在标签中具有不同的值。这些值由 cellForRowAt tableView 函数通过如下系统处理:
按下一个按钮(不是我正在谈论的单元格中的按钮......位于 VC 顶部、tableView 之外的另一个按钮)会调出联系人选择器:

 func selectContact(){//allows user to bring up contactPicker

let contactPicker = CNContactPickerViewController()
contactPicker.displayedPropertyKeys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey]

contactPicker.delegate = self

contactPicker.predicateForEnablingContact = NSPredicate(format: "phoneNumbers.@count >= 0")

contactPicker.predicateForSelectionOfContact = NSPredicate(format: "phoneNumbers.@count >= 1")

self.present(contactPicker, animated: true, completion: nil)
}
@IBAction func selectContactsButton(_ sender: Any) {
selectContact()
//button brings up the picker to allow selection of contact
}

选择其中一个联系人会更新一个数组,tableView 使用该数组来更新标签的值:

func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
contactArray.append(contactProperty.contact)
print(contactArray)// contactArray = [CNContact]()
contactsTableView.reloadData()// reloads the value of the labels
dismiss(animated: true)
}

这些都按预期工作。但是,我在每个单元格中 的按钮遇到了一些问题。此按钮旨在允许在按下按钮的行中替换 tableView 中的 CNContact...(即,如果有 4 行,则有 4 个“替换”按钮。单击第三行的“替换”按钮将替换 contactArray 的第二个索引处的 CNContact。不过,这就是我的问题所在。由于按钮及其操作位于 UITableViewCell 的 swift 文件中,位于 tableViewControllers 中,因此它无法访问 contactArray 来删除和附加,也无法访问 contactArray选择器功能允许选择新联系人,也不允许 tableView 本身运行 .reloadData()。我如何“授予”对 UITableViewCell 的 swift 文件的访问权限,以利用它所属/连接的 tableView Controller 中的内容?
注意 有可能这个问题的整个前提是错误的,我实际上应该将按钮的操作放在其他地方(在 UITableViewCell 的 swift 文件中)。如果是这种情况,我应该把它放在哪里?

最佳答案

由于您在 ViewController 中拥有所有信息,我建议将您的 @IBAction 也移动到您的 ViewController 中。如果您担心引用正确的单元格,您可以在 cellForRow 方法中设置 UIButtontag 值。然后在 @IBAction 中,您可以使用该值访问数组中的正确索引以及单元格本身

关于swift - 如何连接 UITableViewCell 按钮来执行 UITableView 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46165421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com