我有一个带有4个视图/标签的UITabBarController。每个视图都是UINavigationController。
如何在其中一个UINavigationControllers上使用popToRootViewController然后切换标签并将viewController推送到另一个使用动画的UINavigationController?
所以序列是:
开始时我们在Tab 1的视图中,这是一个UINavigationController。 View已经超越了它的根ViewController。
-Tab 1
- UINavigationController1
- RootViewController1
- SomeViewController1 [We are here]
-Tab 2
- UINavigationController2
- RootViewController2
在SomeViewController1中点击一个按钮,导致以下内容:
所以视图看起来像这样:
-Tab 1
- UINavigationController1
- RootViewController1
-Tab 2
- UINavigationController2
- RootViewController2
- SomeViewController2 [We are here]
答案 0 :(得分:1)
int tabYouWantToSelect=2;
BOOL isNavigation=YES;
[[self.tabBarController selectedViewController].navigationController popToRootViewControllerAnimated:YES];
//if any controller is presented as a model view then
//[[self.tabBarController selectedViewController] dismissModalViewControllerAnimated:YES];
[self.tabBarController setSelectedIndex:tabYouWantToSelect];
//the newly pushed view controller's viewWillAppear
-(void)viewWillAppear:(BOOL)animated {
if(isNavigation){
[self.navigationController pushViewController:objAddLocation animated:YES];
}
}
答案 1 :(得分:0)
所有这些都应该通过您的应用程序委托实现文件来实现。
如果您还需要代码,请告诉我......
答案 2 :(得分:0)
我是这样做的。我觉得它比使用与它无关的代码感染根VC更清晰。
我创建了一个UINaviationControllerDelegate,用于检查UINavigationController上剩余的UIViewControllers的数量。如果只剩下一个,则会发布stackAtRoot通知。同时就在我popToRootViewController之前,我注册了一个由此通知触发的命令。当它被触发时,我让它协调选项卡开关并将VC推送到新选项卡的UINavigationController上。它会立即取消注册该命令,因此除非重新注册,否则不会再次调用该命令。