Swift Prepare(for: segue) 未调用

Posted

技术标签:

【中文标题】Swift Prepare(for: segue) 未调用【英文标题】:Swift Prepare(for: segue) not called 【发布时间】:2019-11-28 16:15:05 【问题描述】:

在我的故事板中,controller1 有 natigationController 并连接到控制器 2。奇怪的是 Segue 工作正常,但是

覆盖 func prepare(for: segue)

整个方法没有被调用(我设置了断点)。我在***上复习了很多老问题,但没有人能解决我的问题。谢谢!

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 而不是在封闭的导航控制器上。 谢谢,但应用程序在 self.performSegue 处崩溃。 @TonyOakman 您需要删除当前连接到导航控制器的 segue,并从 您的 VC 连接一个新的。 检查segue的连接。它必须在视图控制器上启动 @vadian 也感谢您的宝贵时间! 【参考方案1】:

您在self.navigationController 上调用performSegue,因此将调用navigationController.prepareForSegue,而不是您的VC 中的那个。您应该将 segue 重新连接到情节提要中的 您的 VC,为其提供标识符,然后调用:

self.performSegue(...)

【讨论】:

谢谢。我试图从一开始就从 VC 的角度添加 segue,但没有奏效。似乎只能从左上角的 viewcontroller 图标添加 segue。

以上是关于Swift Prepare(for: segue) 未调用的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4:在 viewDidLoad 之后调用 prepare(for segue:)

iOS 和 Swift:可以强制解开 tableView.indexPath?

如何在准备中的 switch 语句中使用可选绑定(segue :)

在准备 segue 时,如何将数据传递给子 UIViewController?

你需要调用 super.prepareForSegue: 吗?

Segue 不会执行 Swift