也许这很简单,但我无法弄清楚。
请让我知道这是否正确
在我的tableview单元格中,我有以下关闭项
public var btnBulbTappedClo:((CommentCell) -> (Void))?
我称之为
@IBAction func btnBulbTapped(_ sender: Any) {
self.btnBulbTappedClo?(self)
}
在我的视图控制器中,cellForRow方法
我调用func btnBulbTapped,并按单元格返回了闭包
self.btnBulbTapped(cell.btnBulbTapped)
代码可以正确编译,但是我不知道如何访问单元格?
func btnBulbTapped (_ clou :((CommentCell) -> Void)?) {
// how to access `CommentCell` object here
}
答案 0 :(得分:0)
我觉得您没有正确使用此功能,如果您了解您有一个定义UITableViewCell
的{{1}}子类,则应在点击此单元格内部的按钮时调用闭包。
不确定public var btnBulbTappedClo:((CommentCell) -> (Void))?
函数的作用。您将这样使用:
func btnBulbTapped
根据您在评论中的问题,您有2个选择:
1)只需从给定的闭包中调用一个函数
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//..dequeue your cell
cell.btnBulbTapped = {commentCell in
//here you have access to comment Cell inside of a closure
}
}
2)定义协议
cell.btnBulbTapped = {[weak self] commentCell in
self?.btnPressed(commentCell)
}
func btnPressed(_ cell: CommentCell) {
//do whats needed here with the cell
}
将委托变量添加到您的protocol CommentCellDelegate {
func didSelectCell(_ cell: CommentCell)
}
类中,并通过CommentCell
方法调用该委托:
IBAction
将您的weak var commentDelegate: CommentCellDelegate?
@IBAction func btnBulbTapped(_ sender: Any) {
commentDelegate.didSelectCell(self)
}
//to be sure set delegate to nil in prepareForReuse inside your cell subclass
override func prepareForReuse() {
super.prepareForReuse()
commentDelegate = nil
}
委托给每个单元格
controller