Swift的"Prepare(for: segue)"未被调用

3

在我的Storyboard中,控制器1拥有导航控制器并连接到控制器2。奇怪的是,Segue可以正常工作,但整个方法

override func prepare(for: segue)

却没有被调用(我设置了断点)。我查看了很多Stack Overflow上的旧问题,但没有一个能够解决我的问题。谢谢!

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)

    self.navigationController?.performSegue(withIdentifier: segueId, sender: nil)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == self.segueId {
        let destionationNVC = segue.destination as! UINavigationController
        guard let targetVC = destionationNVC.topViewController as? ViewController2 else { return }

        targetVC.text = self.text
    }
}

你需要在self上调用performSegue,而不是在封闭的导航控制器上调用。 - vadian
谢谢,但应用程序在self.performSegue处崩溃。 - Tony Oakman
@TonyOakman 你需要移除当前连接到导航控制器的segue,并从 你的视图控制器 连接一个新的。 - Sweeper
检查segue的连接。它必须从视图控制器开始。 - vadian
@vadian,谢谢你的时间! - Tony Oakman
1个回答

2

您正在调用self.navigationController上的performSegue,因此将调用navigationController.prepareForSegue而不是您的VC中的prepareForSegue。您应该在故事板中重新连接segue到您的VC,给它一个标识符,并调用:

self.performSegue(...)

谢谢。我尝试从VC的视图一开始就添加segue但没有成功。似乎只能从左上角的视图控制器图标添加segue。 - Tony Oakman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接