从表格单元格中检索信息?

时间:2017-01-15 20:52:47

标签: swift uitableview

我有一个带有2个标签和一个按钮的自定义UITableViewCell。单元格有它自己的类:

class personTableCell: UITableViewCell {
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var emailLabel: UILabel!

    @IBAction func inviteButtonPressed(_ sender: Any) {
        self.accessoryType = .checkmark
    }   
}

在包含表视图的视图控制器中,我在此方法中将单元格添加到表中:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "person", for: indexPath) as? personTableCell
        cell?.nameLabel.text = results[indexPath.row].name
        cell?.emailLabel.text = results[indexPath.row].email
        return cell!
}

当用户按下调用@IBAction func inviteButtonPressed的单元格内的按钮时,我想将单元格的标签文本添加到与表格在同一视图控制器中初始化的数组中。

如果@IBAction func inviteButtonPressed作为表的视图控制器位于单独的文件中,我怎样才能实现这样的目标?

1 个答案:

答案 0 :(得分:1)

我认为使用委托是一种解决方案。

在TableViewCell类

@objc protocol PersonTableViewCellDelegate {
    func personTableViewCellInviteButtonPressed(cell: PersonTableViewCell)
}

class PersonTableViewCell: UITableViewCell {

    weak var delegate: PersonTableViewCellDelegate?

    @IBAction func inviteButtonPressed(_ sender: Any) {
        delegate?.personTableViewCellInviteButtonPressed(cell: self)
    }

}

在ViewController类

class TableViewController: UITableViewController, PersonTableViewCellDelegate {

    var results: [Person] = []
    var invited: [Person] = []

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "person", for: indexPath) as! PersonTableViewCell
        cell.nameLabel.text = results[indexPath.row].name
        cell.emailLabel.text = results[indexPath.row].email
        cell.delegate = self
        return cell
    }

    func personTableViewCellInviteButtonPressed(cell: PersonTableViewCell) {
        guard let indexPath = tableView.indexPath(for: cell) else {
            return
        }
        let person = results[indexPath.row]
        invited.append(person)
    }

}