如何在AppDelegate上从TabBarController获取ViewController?

时间:2012-05-21 16:19:58

标签: iphone ios ipad ios5

我使用的是iOS5故事板,而我的初始视图控制器是TabBarController,与view1&有四种关系。 view2& view3& view4,那么,我该如何获得view3的视图控制器?

我试过了:

[[[[self.window.rootViewController navigationController] tabBarController] viewControllers] objectAtIndex:2];

但它不起作用......

5 个答案:

答案 0 :(得分:31)

你说你的初始(根)视图控制器是一个UITabBarController,但你指的是一个带有带标签栏控制器的导航控制器的视图控制器。您是否在视图控制器层次结构中混淆了?

编辑:

如果你的根视图控制器实际上只是一个标签栏控制器,你想在这里得到第三个标签是代码:

[[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2];

答案 1 :(得分:9)

[self.tabBarController setSelectedIndex:2];

答案 2 :(得分:7)

试试这种方式

在任何视图控制器中

 YourViewController *yourViewController= (YourViewController*)  [self.tabBarController.viewControllers objectAtIndex:3];

这将返回您的视图控制器对象。将其存储到您的视图控制器,您就可以使用它了。 跑去吧

答案 3 :(得分:3)

   UIViewController *loginViewController=self.window.rootViewController;

   UITabBarController *controller=loginViewController.tabBarControllerObj;

   UIViewController *selectedController=controller.selectedViewController;

从此您将获得选定的视图控制器。

获取所有视图控制器只需替换

NSArray *viewControllers = [controller viewControllers];

答案 4 :(得分:0)

Swift 4.0

let viewC = self?.tabBarController.viewControllers.first // will give single Navigation Controller on index 0
let viewC = self?.tabBarController?.viewControllers// will give array of Navigation Controller

此外,您可以查看Visible ViewController

if let nav = viewC as? UINavigationController {
   if nav.visibleViewController is YourViewControllerName{
        // Do Code
     }
}