从模态视图内部推送到 iOS NavigationController

Posted

技术标签:

【中文标题】从模态视图内部推送到 iOS NavigationController【英文标题】:Push to iOS NavigationController from inside Modal View 【发布时间】:2011-12-20 10:24:38 【问题描述】:

我是 ios 编程新手,也是 Stack Overflow 新手。我一直在努力寻找问题的答案,但搜索没有产生任何结果。

我正在尝试降低我的应用程序的流量,但我遇到了问题。我希望发生的是这样的:

初始视图(NavigationController)-> 搜索视图(模态)-> 在关闭视图之前,以编程方式将不同的视图从搜索视图推送到初始视图的 NavigationController。

我的理解是,在模态视图中,我应该能够做类似的事情

[self.parentViewController.nagivationController pushViewController: someView]

但这根本不起作用。关闭模态视图后,我又回到了初始视图。

我还尝试传递对初始视图导航控制器的引用,但我似乎无法正常工作。

因此,如果有人知道如何以编程方式从模态视图内部将视图推送到导航堆栈,我很乐意学习!我真的开始认为我对模态视图的理解存在根本缺陷。

在此先感谢您提供的任何帮助,以及您对新手的耐心。

【问题讨论】:

你尝试过 self.navigationController 吗? navigationController 属性被记录为返回父级或祖先,因此如果 self.parentViewController 是 navigationController,您当前的代码将错过它。 我收到了一封关于这个问题的电子邮件,所以我想我会详细说明我的评论:Pushing a UIViewController From a Modal View 【参考方案1】:

Annnnnd,我很笨。

我的方法是正确的,但我花了一天时间才意识到 self.parentViewController 返回一个 UINavigationController,所以额外的“.navigationController”是完全没有必要的。

正确的参考:

[self.parentViewController pushViewController: someView]

感谢您的评论,罗。

【讨论】:

我不确定您使用的是什么方法,但对我来说self.parentViewController 返回一个UIViewController,这当然不会实现任何类型的其他视图推送。我也不认为没有animated 参数的[self.parentViewController pushViewController: someView] 方法存在。经过大量搜索,我在这个excellent blog post找到了完美的解决方案。【参考方案2】:

parentViewController 返回 nil,但使用 presentingViewController 有效。斯威夫特 2.x:

    let vc = storyboard!.instantiateViewControllerWithIdentifier(CustomViewControllerID) as! CustomViewController
    if let navController = presentingViewController as? UINavigationController 
        navController.pushViewController(vc, animated: false)
    

【讨论】:

以上是关于从模态视图内部推送到 iOS NavigationController的主要内容,如果未能解决你的问题,请参考以下文章

创建一个可以模态显示或推送到导航堆栈的 UIView

如何检查视图控制器是不是以模态方式呈现或推送到导航堆栈上?

推然后模态然后推?

将 MFMailComposeViewController 推送到导航堆栈上?未以模态方式呈现

推送到上一个视图 ios 的后退按钮

从 NSObject 的子类内部推送到 UIViewController