我正在尝试实现委托(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/