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

标签 swift uitableview

我有一个应用程序,它使用一个包含原型(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/

相关文章:

ios - 类在目标中被多次链接

ios - 具有自定义单元格和标签的heightForRowAtIndexPath

ios - tableView reloadData 崩溃包括崩溃报告

objective-c - iOS的UITableView部分之间的空间不受控制吗?

swift - UIPageViewController多次加载ChildViews

swift - Cocoapod 中的可选协议(protocol)方法

swift - 具有非默认但仍为设备原生采样率的 AVAudioSinkNode

ios - iOS中的GCDWeb服务器崩溃问题

objective-c - 将对象添加到数组后,tableview 不会更新

ios - UITableViewCell 占位符图像