如何在AppDelegate上从TabBarController获取ViewController?

Ari*_*ang 11 iphone ipad ios ios5

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

我试过了:

[[[[self.window.rootViewController navigationController] tabBarController] viewControllers] objectAtIndex:2];
Run Code Online (Sandbox Code Playgroud)

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

Dim*_*ima 31

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

编辑:

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

[[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2];
Run Code Online (Sandbox Code Playgroud)

  • 是的,它有效.我太蠢了.UITabBarController*tabBarController =(UITabBarController*)self.window.rootViewController; (2认同)

Hai*_*der 9

[self.tabBarController setSelectedIndex:2];
Run Code Online (Sandbox Code Playgroud)

  • 虽然这是最简单的答案,但这是获取tabBarController的最简单,最好的方法.UITabBarController为UIViewController添加一个类别,如果视图在一个中,则返回UITabBarController,如果不是,则返回NULL. (2认同)

Tun*_*her 7

试试这种方式

在任何视图控制器中

 YourViewController *yourViewController= (YourViewController*)  [self.tabBarController.viewControllers objectAtIndex:3];
Run Code Online (Sandbox Code Playgroud)

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

  • 什么是这个答案的Swift 3版本? (2认同)

Gur*_*ngh 5

斯威夫特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
Run Code Online (Sandbox Code Playgroud)

此外,您可以检查 Visible ViewController

if let nav = viewC as? UINavigationController {
   if nav.visibleViewController is YourViewControllerName{
        // Do Code
     }
}
Run Code Online (Sandbox Code Playgroud)