这是我的情况:我有一个viewController,它包含一个嵌入在容器视图中的tableViewController。然后,我有三个类:TableViewCell,TableViewController和ViewController。在原型单元格中,有一个连接到TableViewCell类的按钮。当有人按下该单元格中的按钮时,我想在我的ViewController中运行一个方法。为此,我创建了一些协议和委托,将按钮指向ViewController。
让我告诉你我的代码:
这是我的TableViewCell文件:
protocol TVCDelegate {
func cellClicked()
}
Class TableViewCell: UITableViewCell {
var delegate: OtherVCDelegate?
@IBAction func buyUpgrade(_ sender: Any) {
self.delegate?.cellClicked()
}
}
这是我的TableViewController文件:
protocol TVCToVCDelegate {
func sendThrough()
}
Class TableViewController: UITableViewController, TVCDelegate {
func cellClicked() {
self.delegate?.sendThrough()
}
open var delegate: UTVToVCDelegate?
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "TableViewCell"
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? TableViewCell else {
fatalError("The dequeued cell is not an instance of TableViewCell.")
}
// Configure the cell...
cell.delegate = self
return cell
}
}
然后,我的ViewController文件:
class ViewController: UIViewController, UTVToVCDelegate {
//MARK: Delegate Methods
func sendThrough() {
print("The delegate was completed succesfully")
}
override func viewDidLoad() {
super.viewDidLoad()
UpgradesTableViewController.delegate = self
//ERROR: Instance member delegate can not be used on type 'TableViewController'
}
}
但是,有一条错误消息,实例成员委托不能在类型'TableViewController'上使用。
我不知道如何解决这个问题,也许有人可以提供帮助,拜托? 感谢
答案 0 :(得分:0)
对我来说,看起来你的问题是,你的UIViewController不知道你的TableViewController类的任何实例。您需要在UIViewController中实例化TableViewController,以便可以将委托分配给它。
编辑:在您的情况下,您需要将故事板中的插座拖到UIViewController并设置委托。
答案 1 :(得分:0)
错误告诉您不能在delegate
类本身上使用UpgradesTableViewController
属性。您需要在delegate
。
UpgradesTableViewController
属性
在ViewController
添加插座,如下所示:
@IBOutlet var tableViewController: UpgradesTableViewController!
然后将故事板中的表格视图控制器连接到ViewController
。
最后,更改一行:
UpgradesTableViewController.delegate = self
为:
tableViewController.delegate = self