我完全遵循此tutorial来创建自定义委托。
我创建了委托
protocol UserTableViewDelegate: class {
func helpClicked()
}
然后在班级HelpTableViewCell
弱var委托:UserTableViewDelegate?
@IBAction func helpButtonClicked(_ sender: UIButton) {
delegate?.helpClicked()
}
在课程UserTableViewController
中,我符合委托UserTableViewDelegate
,然后
func helpClicked() {
}
但是函数永远不会被调用。
答案 0 :(得分:1)
HelpTableViewCell类中的委托变量总是为nil而委托?.helpClicked()无效。
那是因为你还没有创建一个委托。委托是实现一组特定委托方法的对象。您至少在您已经展示的代码中没有创建任何此类对象。
我创建了委托
不,您已定义了委托协议。您还没有实例化采用该协议的类。您引用的教程在其使用的语言中非常草率,并且没有真正区分delegate protocol
,即特定类型的委托应该实现的方法集,以及委托本身,即向委托人提供这些方法的特定对象。
在类UserTableViewController中我符合委托UserTableViewDelegate然后
这是正确的想法,但如果表达式delegate?.helpClicked()
没有被调用因为delegate
为nil,那么你必须将控制器分配为表&# 39;代表。有时,可以在故事板中分配代理,就像您将视图控制器连接到其视图一样。如果有问题的表使用静态单元格,那么您可以这样做,其中所有单元格都在故事板中创建。只需将HelpTableViewCell delegate
作为IBOutlet,然后将其连接到UserTableViewController即可。但更常见的是,表格单元格是动态的并且在运行时配置;在这种情况下,您需要在配置单元格时为HelpTableViewCell设置delegate
属性,最有可能在tableView(_:cellForRowAt:)
中。
尽管如此,在您所描述的情况下,您可能根本不需要为代表团而烦恼。当用户与单元格交互时,已经通知表格视图的委托。你不会在这里说你是否在iOS或MacOS上工作,但这并不重要:UITableViewDelegate(iOS)和NSTableViewDelegate(macOS)都有点击单元格时调用的方法或者点击。单元格通常是非常轻量级的对象 - 它们通常主要担心正确显示内容并将用户交互留给表格的委托(几乎总是视图控制器)。
答案 1 :(得分:0)
在{{1}}范围内,您还需要设置委托属性,如下所示 -
nameofyourCustomcellObject.delegate = self