如何使用 Swift 以编程方式跨越 iOS 导航控制器?

Posted

技术标签:

【中文标题】如何使用 Swift 以编程方式跨越 iOS 导航控制器?【英文标题】:How to segue across iOS Navigation Controller programmatically using Swift? 【发布时间】:2016-01-07 04:08:29 【问题描述】:

我的问题很像这两个:

ios - How to segue programmatically using swift How do I create a segue that can be called from a button that is created programmatically?

除了我的 segue 是导航控制器,像这样:Main->NC->VC2>VC3

当我使用第一个视图控制器中的按钮触发从 Main 到 VC2 的 segue 时,它​​工作正常。当代码调用 segue 时,它​​不起作用。我需要自动触发 segue 以响应 Main 中的代码确定的某些条件。

当按钮链接到 Main 中编码的函数时,它仍然有效。按钮功能定义中的代码运行并发生转场。当我尝试在函数代码中触发 segue 时,使用

performSegueWithIdentifier("showHelp", sender: nil)

performSegueWithIdentifier("showHelp", sender: self)

我收到一个错误:

警告:尝试在其视图不在窗口层次结构中的 上呈现

尽管有警告,但按钮会继续触发 segue,但不会在按钮的函数被其他代码调用时。

【问题讨论】:

好的,看起来警告来自将按钮定义为 segue 触发器和编码按钮。我消除了segue触发器,留下了功能代码,警告消失了。但是现在的问题是,当从 Main 的 viewDidLoad 中调用按钮的函数时,没有执行 segue。我在那里有用于调试的打印语句和所有打印语句,但没有发生转场。没有警告或错误,什么都没有。 在调用 segue 之前添加 1 秒延迟可以解决问题。我使用了***.com/questions/27517632/…中提到的dispatch_after方法 【参考方案1】:
self.navigationController?.pushViewController(nextViewController, animated: true)

【讨论】:

以上是关于如何使用 Swift 以编程方式跨越 iOS 导航控制器?的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift 从推送通知以编程方式导航到某些 ViewController

如何以编程方式从 iOS Swift 3 中的 XIB 推送和呈现给 UIViewController

如何以编程方式创建标签栏控制器后添加导航界面(Swift)

在 Swift 中单击以编程方式切换到 TableViewCell 上的导航视图

Swift 以编程方式导航到另一个视图控制器/场景

IOS ViewController 导航路径 - 如何以编程方式向后导航