如何以编程方式在导航控制器上推送下一个视图控制器?

Posted

技术标签:

【中文标题】如何以编程方式在导航控制器上推送下一个视图控制器?【英文标题】:How can I push the next view controller on a navigation controller programmatically? 【发布时间】:2015-06-20 00:14:24 【问题描述】:

如何以编程方式在导航控制器上推送下一个视图控制器(无需按钮)?

我知道如何实例化和呈现一个新的控制器如下

 var next = self.storyboard?.instantiateViewControllerWithIdentifier("PlaceInfo") as! PlaceInfoController         
 self.presentViewController(next, animated: false, completion: nil)

但我想推送到导航控制器上的下一个视图控制器。 我尝试了以下 self.navigationController?.pushViewController() 但没有成功

 var next = self.storyboard?.instantiateViewControllerWithIdentifier("PlaceInfo") as! PlaceInfoController
 self.navigationController?.pushViewController(next, animated: true)

【问题讨论】:

你检查过self.navigationController是不是nil吗? 它是零。知道为什么吗?提前谢谢你@Leo 表示这个viewController不在导航栈中,先把它放到导航栈中,再push另一个 【参考方案1】:

您是否尝试过使用performSegueWithIdentifier

在此处了解更多信息:

https://developer.apple.com/library/mac/documentation/AppKit/Reference/NSSeguePerforming_Protocol/#//apple_ref/occ/intfm/NSSeguePerforming/performSegueWithIdentifier:sender:

【讨论】:

是的,应用程序崩溃了。错误:由于未捕获的异常“NSGenericException”而终止应用程序,原因:“找不到用于 segue 'PushPlaceView' 的导航控制器。只有当源控制器由 UINavigationController 的实例管理时,才能使用推送 segue。 @rodrigochousal 由于@Leo 所说,应用程序崩溃了,视图控制器需要在导航堆栈中才能工作。

以上是关于如何以编程方式在导航控制器上推送下一个视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式显示/推送导航控制器

设置根视图控制器,然后以编程方式导航到下一个视图

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

以编程方式从 UiView 推送新视图控制器的问题

如何以编程方式将视图控制器嵌入到导航视图控制器中

ios:如何关闭模态视图控制器,然后弹出推送的视图控制器