我有一个UITableViewController
,当用户单击TableView中的单元格时,需要从另一个CCController中调用一个函数。问题是我无法在包含函数的ViewController中将委托分配给self。问题在于以下行:
let messageTableVC = UITableViewController() as! MessagesTableViewController
messageTableVC.messageDelegate2 = self
let语句的生成没有错误,但是应用程序在运行时在该行崩溃并显示此错误:
无法将类型'UITableViewController'(0x1b77cb588)的值强制转换为
'MFPApp.MessagesTableViewController'(0x100719e08)。
MessagesTableViewController
是UITableViewController
。我尝试过转换为其他ViewController类型,但不会构建其他任何东西。以下是相关代码:
MessagesTableViewController
protocol openMessageDelegate2 {
func addNewTab2()
}
class MessagesTableViewController: UITableViewController, IndicatorInfoProvider {
var messageDelegate2: openMessageDelegate2!
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("cell clicked")
messageDelegate2?.addNewTab2()
}
}
在第二个VC中:
class MainViewController: ButtonBarPagerTabStripViewController {
override func viewDidAppear(_ animated: Bool) {
let messageTableVC = UITableViewController() as! MessagesTableViewController
//let messageTableVC = MessagesTableViewController()
messageTableVC.messageDelegate2 = self
}
}
extension MainViewController: openMessageDelegate2 {
func addNewTab2(){
print("new tab")
addNewVC = "yes"
self.reloadPagerTabStripView()
self.moveToViewController(at: childViewControllers2.count-1)
}
}
最佳答案
由于UITableViewController
不是MessagesTableViewController
的子类,因此不能这样转换。
如果您只是想实例化MessagesTableViewController
,只需将该行更改为:
let messageTableVC = MessagesTableViewController()
messageTableVC.messageDelegate2 = self
关于ios - 如何在Swift中使用委托(delegate)在具有TableViewController的TableView中单击单元格来调用函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48193314/