2013-10-16 84 views
-2

我不得不对此我创造了这样的如何将新的视图控制器推送到tabbarcontroller当前存在的navigationcontroller?

UITabBarcontroller (UIWindow's rootViewController) 
    ->UINavigationController (first tab) 
     -->UIViewController 
    ->UINavigationController (second tab) 
     -->UIViewController 
在导航栏中

我有一个按钮,我正在推动的另一个视图控制器自身的.navigation controller.But现在我想的一个tabbarcontroller应用同样的动作也来自另一个导航控制器。所以我需要推到导航控制器,这是顶视图controller.I需要替换[self.navigationController pushViewController:viewcontroller animated:NO];以一种方式,无论是哪里的导航控制器目前在那里我们需要添加到tabbar控制器。可以任何身体帮助我在这?

回答

2

那么如何简单得多拿着指向同当前可见的UINavigationController的(你应该认为REFFERENCE从的UITabBarController委托tabBarController:didSelectViewController:

所以,你在你的AppDelegate添加一个变量:

UINavigationController *navController; 

然后:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    if (viewController.navigationController) 
     navController = viewController.navigationController; 
} 

现在,你做的推这样:

if (navController) 
    [navController pushViewController:viewcontroller animated:NO]; 
+0

我认为从的viewController tabBarController:didSelectViewController应该已经NavigationController – Skie

+0

是的,正确的,但viewController.navigationController应该回到它正确反正。 – Lefteris

0

所以刚开始,你需要有TabBarController访问。我想你可以在AppDelegate的某处找到它。

那么你可以拨打:

UIViewController *ctrl = myTabBarCtrl.selectedViewController; 
[ctrl.navigationController pushViewController:viewcontroller animated:NO]; 
+1

这样做的问题在于,如果用户选择了一个标签是一个简单的UIViewController它会崩溃,因为'myTabBarCtrl.selectedViewController'将返回'UIViewController',而不是一个'UINavigationController'对象 – Lefteris

+0

肯定。它基于TC的导航设计。但是我已经更新了代码以更加稳定。 – Skie

相关问题