我有一个带有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
作为表的视图控制器位于单独的文件中,我怎样才能实现这样的目标?
答案 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)
}
}