模式解除后返回导航控制器索引(无情节提要)

Posted

技术标签:

【中文标题】模式解除后返回导航控制器索引(无情节提要)【英文标题】:Return to Navigation Controller index after modal dismissal (no storyboards) 【发布时间】:2016-12-06 23:45:38 【问题描述】:

我试图从导航控制器堆栈中以模态方式呈现视图控制器,然后在解除后返回到该特定视图控制器索引。此NavigationControllerUITabBarController 内。

我的应用是用 XIB 和编程导航控制器和标签栏控制器编写的。我没有使用故事板。 Navigation Controller 导航全部用self.navigationController.pushViewController(viewController: TabOnePageTwoViewController, animated: true) 完成

这是我的视图控制器配置。

RootTabBarController -> UINavigationController(rootViewController: TabOneController) -> TabOnePageOneController -> ModalView

问题是,当我在模态呈现的视图中self.dismiss() 时,我返回到导航控制器的根目录,而不是呈现模态的视图TabOneController

我认为正确的方法是从导航控制器堆栈中选择视图控制器,并选择 popToViewController 来选择正确的。

为此,我认为在self.dismiss() 的完成块中,我需要导航到正确的视图控制器。

    let viewControllers = self.navigationController!.viewControllers

    self.dismiss(animated: true, completion: 
        for aViewController in viewControllers 
            if(aViewController is TabOnePageTwoViewViewController)
                print("navigating back to page one now")
                self.navigationController!.popToViewController(aViewController, animated: true);
            
        
    )

`

很遗憾,这不起作用。据我所知,self.navigationController 无法从模态视图中访问。

在关闭显示的模式后如何返回导航控制器索引?

我已通过以下 URL 将示例应用程序上传到 github:https://github.com/thexande/TabControllerAndNavigationControllerExample

如果你对 ios 中的程序化导航很了解,那就下载看看吧!

谢谢大家!!

【问题讨论】:

【参考方案1】:

我在Github 上查看了您的示例项目。

您的示例项目无法正常运行只是一个小问题。

您应该在RootTabBarViewController viewDidLoad 方法中设置navigationStack,而不是viewWillAppear。这是一些奇怪的行为,可能是框架中的一个错误,我找不到任何文档为什么它应该在那里发生,但确实如此。

所以删除viewWillAppear,您的viewDidLoad 应该如下所示:

override func viewDidLoad() 
        super.viewDidLoad()
        self.delegate = self
        let tabOne = UINavigationController(rootViewController: TabOneViewController())
        tabOne.title = "Tab One"
        let tabTwo = UINavigationController(rootViewController: TabTwoViewController())
        tabTwo.title = "Tab Two"
        self.viewControllers = [tabOne, tabTwo]

【讨论】:

以上是关于模式解除后返回导航控制器索引(无情节提要)的主要内容,如果未能解决你的问题,请参考以下文章

在没有导航控制器的情节提要中切换 UIViewControllers

在多个情节提要上维护导航栏?

无法从 iOS 的情节提要中嵌入导航控制器

导航控制器有时会使用情节提要推送到黑屏

将单独的 xib 视图控制器加载到情节提要导航中[重复]

如何在情节提要的标签栏上启动导航控制器的第三个视图控制器