可能这很简单,但我想不通。
请告诉我是不是正确的方法
在我的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
  }

最佳答案

我有一种感觉你没有正确使用这个,如果我理解你有一个定义UITableViewCellpublic 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/

10-11 08:24