总结一下我的问题:我有一个更大的桌子,上面有很多来自不同人的帖子。我正在遍历表单元的列表以及tableview的数据源,如以下示例所示。我想给单元格的每个textlabel一个单击侦听器。因此,我在表格数据源的cellForRowAt中提出了此要求:
let tap = UITapGestureRecognizer(target: self, action: #selector(clickedOnLabel(sender:, content: local[indexPath.row][2],rank: rank)))
cell.textLabel?.isUserInteractionEnabled = true
cell.addGestureRecognizer(tap)
所以我想在此处添加此点击功能,它需要参数内容并对其进行排名:
@objc func clickedOnLabel(sender: UITapGestureRecognizer, content: String, rank: Int){
//Do some stuff here
}
但是我不允许通过选择器传递内容和排名,当我放置内容并进行排名时,一切正常……那仅仅是语法吗?
答案 0 :(得分:0)
这是一个如何使用闭包实现此目标的小例子。
cell.updateParent = { [weak self] score, rank in
// Do magic here
}
在您的单元格类中,您应该添加类似内容
var updateParent: ((Double, Int) -> Void)?
@IBAction func doMagicInParent(_ sender: Any) {
updateParent?(score, rank)
}
这也可以通过使用委托来实现。或者,您也可以通过通知中心传递数据。
答案 1 :(得分:0)
这是使用委托的解决方案:
protocol MyCustomCellDelegate{
func didTapOnLabel(content: String, rank: Int)
}
var delegate: MyCustomCellDelegate?
发生点击时,致电
self.delegate?.didTapOnLabel(content: "my content", rank: 100)
cell.delegate = self
并符合委托人的条件:
extension YouViewController: MyCustomCellDelegate{
func didTapOnLabel(content: String, rank: Int){
// do your stuff
}
}