ios - 从 UITableViewCell 到 ViewController 的按钮操作

标签 ios iphone swift delegates

我正在尝试实现委托(delegate)方式来对从我的 UITableViewCell 到 ViewController 的按钮点击执行一些操作。以下是我到目前为止所拥有的 -

表格 View 单元格:

protocol UserCellDelegate : class {
    func disableUser(cell: UserCell, button: UIButton)
}

class UserCell : UITableViewCell {

    @IBOutlet weak var userLabel: UILabel!
    @IBOutlet weak var userDescription: UILabel!

    @IBOutlet weak var writeOutUser: UIButton!

    weak var delegate: UserCellDelegate?

    override func awakeFromNib() {
        super.awakeFromNib()
        writeOutUser.layer.cornerRadius = 5.0
    }


    @IBAction func disableUserButtonAction(sender: UIButton) {
        delegate?.disableUser(self, button: writeOutUser)  //self here I believe to be the cell 
    }


}

View Controller :

class UserDetailTableViewController : UIViewController, UserCellDelegate {
    override func viewDidLoad() {
      super.viewDidLoad()
      let userCell = UserCell()
      userCell.delegate = self
    }

    func disableUser(cell: UserCell, button: UIButton) {
      print("VC: User Disabled")
    }
}

这里的问题是,我的 ViewController 中的 disableUser 函数永远不会被调用。我究竟做错了什么?

最好的方法是什么?

我提到了 SO Approved Answer Here这就是我所关注的,但没有运气。 任何帮助将不胜感激。谢谢!!

最佳答案

您应该在cellForRowAtIndexPath 方法中设置单元格的delegate。正如@vadian 所说,在viewDidLoad 中,您不应该使用默认初始化程序来初始化您的单元格,并且通过这种方式在 viewDidLoad 中,您的单元格的委托(delegate)为 nil。

要么使用 init(style: reuseIdentifier) 初始化您的单元格,要么在单元格中为行方法设置委托(delegate),因为无论如何您都将在该方法中初始化单元格。

关于ios - 从 UITableViewCell 到 ViewController 的按钮操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40001994/

相关文章:

java - iOS 调用 [NSDate timeIntervalSinceNow] 的 Android/Java 等价物是什么?

iphone - 如何在 iPhone 中追踪手指的长按操作?

ios - UIWebView 委托(delegate)不会在自定义类中触发

ios - Swift 项目的代码签名问题

ios - 将 MKRoute 转换为 NSData

iphone - 如何使用 CSS 删除 iPhone 下拉列表中的 '...'?

ios - 我怎么知道这个特定函数在哪里被调用?

ios - 如何将数据发送到新 View

objective-c - 在自定义单元格中双重选择一个 uitableviewcell

Xcode - 无法采用协议(protocol)