gpt4 book ai didi

ios - 如何使用 Swift 中的委托(delegate)通过 TableViewController 中的 TableView 中的单元格单击来调用函数?

转载 作者:行者123 更新时间:2023-11-30 11:52:29 24 4
gpt4 key购买 nike

我有一个UITableViewController当用户单击 TableView 中的单元格时,我需要调用另一个 ViewController 中的函数。问题是我无法在包含该函数的 ViewController 中将委托(delegate)分配给 self 。问题出在以下行:

let messageTableVC = UITableViewController() as! MessagesTableViewController
messageTableVC.messageDelegate2 = self

let 语句构建时没有错误,但应用程序在运行时崩溃并出现此错误:

Could not cast value of type 'UITableViewController' (0x1b77cb588) to 'MFPApp.MessagesTableViewController' (0x100719e08).

MessagesTableViewControllerUITableViewController 。我尝试过转换为其他 ViewController 类型,但不会构建任何其他类型。相关代码如下:

消息 TableView Controller

    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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com