【问题标题】:Opening TabbedBarController from TableViewController从 TableViewController 打开 TabbedBarController
【发布时间】:2020-04-15 22:32:33
【问题描述】:

这是我的 tableViewController,我在其中调用 tabbedView,但是我在这一行遇到异常 let viewController = segue.destination as! EViewController 异常是:

Could not cast value of type 'UITabBarController' (0x7fff897a2cd8) to 'Test.EViewController'

这很奇怪,因为 EViewController 是 UIViewController 而不是 UITabBarController

EviewController 是 TabbedViewController 中的第一个 ViewController,我应该调用父控制器吗?我该怎么做?我想将数据传递给 tabbedViewController

extension ViewController: UITableViewDataSource, UITableViewDelegate {

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.selectedName = (self.tableView.cellForRow(at: indexPath)?.textLabel?.text)!
    performSegue(withIdentifier: “menu”, sender: self)
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.names.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

    cell.textLabel?.text = names[indexPath.row]

    return cell
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if(segue.identifier == “menu”) {
        let viewController = segue.destination as! EViewController
    }
}
}

【问题讨论】:

    标签: swift tabbarcontroller


    【解决方案1】:

    问题发生在这些代码上

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if(segue.identifier == “menu”) {
            let viewController = segue.destination as! EViewController
        }
    }
    

    segue.destination应该是UITabBarController而不是EViewController,你用as!强行把UITabBarController转换成EViewController会报错。

    在这种情况下,你应该看看UINavigationControllerUITabBarController,视图堆栈是

    |UITabBarController|
        viewControllers:
        |EViewController|
        ...
    

    所以你应该使用segue.destination.topViewController 来解决这个问题。

    【讨论】:

    • 哦,你是对的,但是如果我没有使用我的自定义控制器(它是选项卡控制器中的 UIViewController),我该如何设置属性?
    • 那里是一样的,只是没有as!来设置类类型
    • 对不起,我不明白。对 Swift 来说还是新手。我尝试像这样更新代码,但现在我有一个 sigabrt // 第一行给了我 sigabrt let viewController = segue.destination as! UINavigationController let eVC = viewController.viewControllers.first as! EViewController eVC.name = name
    • btw topViewController 不是目的地的属性,因为目的地是 uivTabBarController
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    相关资源
    最近更新 更多