Iphone 如何从AppDelegate上的TabBarController获取ViewController?

Iphone 如何从AppDelegate上的TabBarController获取ViewController?,iphone,ios,ipad,ios5,Iphone,Ios,Ipad,Ios5,我使用iOS5情节提要,我的初始视图控制器是TabBarController,它与view1&view2&view3&view4有四种关系,那么,如何获取view3的视图控制器呢 我试过: [[[[self.window.rootViewController navigationController] tabBarController] viewControllers] objectAtIndex:2]; 但它不起作用…您说过您的初始(根)视图控制器是UITabBarController,但您

我使用iOS5情节提要,我的初始视图控制器是
TabBarController
,它与view1&view2&view3&view4有四种关系,那么,如何获取view3的视图控制器呢

我试过:

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

但它不起作用…

您说过您的初始(根)视图控制器是UITabBarController,但您指的是带有导航控制器和选项卡栏控制器的视图控制器。您是否在视图控制器层次结构中混淆了

编辑:

如果您的根视图控制器实际上只是一个选项卡栏控制器,并且希望获得第三个选项卡,则代码如下:

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

在任何视图控制器中

 YourViewController *yourViewController= (YourViewController*)  [self.tabBarController.viewControllers objectAtIndex:3];
这将返回视图控制器对象。将其强制转换到视图控制器,您就可以使用它了。 快跑

   UIViewController *loginViewController=self.window.rootViewController;

   UITabBarController *controller=loginViewController.tabBarControllerObj;

   UIViewController *selectedController=controller.selectedViewController;
从中,您将获得选定的视图控制器

要获得所有视图控制器,只需更换

NSArray *viewControllers = [controller viewControllers];
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
     }
}

“UIViewController”没有可见的@interface声明选择器“ViewController”是的,它可以工作。我真傻。UITabBarController*tabBarController=(UITabBarController*)self.window.rootViewController;虽然这是有史以来最简单的答案,但这是获得tabBarController的最简单和最好的方法。UITabBarController向UIViewController添加一个类别,如果视图在其中,则返回UITabBarController;如果视图不在其中,则返回NULL。是否有方法在选定索引处获取对象(视图控制器)?此答案的Swift 3版本是什么?
if let nav = viewC as? UINavigationController {
   if nav.visibleViewController is YourViewControllerName{
        // Do Code
     }
}