【问题标题】:Perform segue loses Navigation Controller执行 segue 丢失导航控制器
【发布时间】:2019-01-21 10:28:43
【问题描述】:

我有一个 Show 类型 UIStoryboardSegueabSegue 标识符。它从 UIViewController A 导航到 B

在整个应用程序中,我使用了自定义 UINavigationController,它工作得非常好,但在这里却不行。

使用self.performSegue(id: "abSegue", sender: self) 会导致UINavigationController 丢失,但使用

let controller = UIStoryboard(name: "Storyboard", bundle: bundle).instantiateViewController(withIdentifier: "B")
navigationController?.pushViewController(controller)

工作正常,我收到了预期的UINavigationController

什么会导致这种行为?

【问题讨论】:

  • 在你的故事板中,A 是导航控制器的根 VC,还是至少通过 segues 连接到导航控制器?
  • @DonMag 是的,它是
  • OK - 你的故事板中的从AB 也是 在导航控制器层次结构中吗?它的“善良”是Show (e.g. Push)?
  • 这个最新的@DonMag 问题可能是这里的关键......您可能想给我们一个快速概述 UINavigationController → 如何链接到 A → 链接到 B... 也许通过提供您的故事板的屏幕截图。转场可能很棘手。

标签: swift uinavigationcontroller storyboard uistoryboardsegue pushviewcontroller


【解决方案1】:

使用

self.performSegue(withIdentifier: segueID, sender: self)

【讨论】:

  • 我使用 Swift 3.3 版
  • 这正是提问者正在做的事情,所以这并不能真正回答他们的问题
【解决方案2】:

请注意,当您通过 interfece builder 连接 segue 时,您必须指定 segue 的类型,您有多个选项:showpresent modally 等。为了将控制器推送到导航,您应该为 segue 类型选择 show(或 push 用于以前版本的 swift),否则它将以模态方式显示控制器

【讨论】:

    【解决方案3】:

    尝试像这样指定UIViewController

    let storyboard = UIStoryboard(name: "Storyboard", bundle: bundle)
    let vcB = searchStoryboard.instantiateViewController(withIdentifier: "B") as! ViewControllerB // or the name of your `UIViewController`
    self.navigationController?.pushViewController(vcB, animated: true)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-14
      • 2017-03-03
      • 2019-10-25
      • 2014-11-23
      • 2020-03-20
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多