1

我试图从导航控制器堆栈中以模态方式呈现视图控制器,然后在解散后返回到特定的视图控制器索引。这NavigationController是在UITabBarController返回导航模式解除后的控制器索引(无故事板)

我的应用程序是用XIB和编程导航控制器和标签栏控制器编写的。我不使用故事板。导航控制器导航全部通过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不能从模态视图内访问。

如何解除其提供的模式后返回导航控制器索引?

我已经上传了示例应用程序在以下网址到GitHub的:https://github.com/thexande/TabControllerAndNavigationControllerExample

如果你知道内IOS程序化的导航好,下载看一看!

谢谢大家!

回答

1

我看过你的示例项目Github

只有一个小问题,为什么你的示例项目无法正常工作。

您应该在RootTabBarViewControllerviewDidLoad方法中设置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] 
} 
+0

干得好先生。您的解决方案工作完美 – thexande

相关问题