可能这很简单,但我想不通。
请告诉我是不是正确的方法
在我的tableview单元格中,我有以下闭包
public var btnBulbTappedClo:((CommentCell) -> (Void))?
我称之为
@IBAction func btnBulbTapped(_ sender: Any) {
self.btnBulbTappedClo?(self)
}
在我的视图中控制器cellForRow方法
我调用func btnBulbTapped并按单元格返回闭包
self.btnBulbTapped(cell.btnBulbTapped)
代码编译正确,但我不知道如何访问cell?
func btnBulbTapped (_ clou :((CommentCell) -> Void)?) {
// how to access `CommentCell` object here
}
最佳答案
我有一种感觉你没有正确使用这个,如果我理解你有一个定义UITableViewCell
的public var btnBulbTappedClo:((CommentCell) -> (Void))?
子类,当这个单元格中的一个按钮被点击时,应该调用闭包。。。
不确定您的func btnBulbTapped
函数要执行什么操作。您可以这样使用:
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
}
}
根据您在评论中提出的问题,您有两个选择:
1)从给定的闭包调用函数
cell.btnBulbTapped = {[weak self] commentCell in
self?.btnPressed(commentCell)
}
func btnPressed(_ cell: CommentCell) {
//do whats needed here with the cell
}
2)定义协议
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
分配为每个单元格的代理override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//..dequeue your cell
cell.commentDelegate = self
}
func didSelectCell(_ cell: CommentCell) {
//do what's needed here
}
关于swift - 捕获功能中的快速关闭值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51891337/