2012-05-21 83 views
11

我使用iOS5故事板,並且我的初始視圖控制器是TabBarController,有四種關係可以查看1 & view2 & view3 & view4,所以,我怎樣才能得到view3的視圖控制器?如何從AppDelegate的TabBarController獲取ViewController?

我想:

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

但它不工作...

回答

30

你說,你的初始(根)視圖控制器是一個的UITabBarController,但你指的是一個視圖控制器用帶有標籤欄控制器的導航控制器。你在視圖控制器層次結構中混淆了嗎?

編輯:

,如果你的根視圖控制器實際上只是一個標籤欄控制器,你想在這裏拿到第三個標籤是代碼:

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

爲 'UIViewController的' 不可見@interface聲明選擇器'viewControllers' –

+2

是的,它的工作原理。我很愚蠢。 UITabBarController * tabBarController =(UITabBarController *)self.window.rootViewController; –

9
[self.tabBarController setSelectedIndex:2]; 
+2

有史以來最小的答案,這是獲得tabBarController最簡單和最好的方法。 UITabBarController向UIViewController添加一個類別,如果視圖位於一個UITabBarController中,則返回UITabBarController;如果不是,則爲NULL。 –

+1

有沒有什麼辦法讓選定的索引處的對象(視圖控制器)? –

7

嘗試這種方式

在任何視圖中控制器

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

這將返回您的視圖控制器對象。將其發送給您的視圖控制器,並準備好使用它。 run and Go

+0

這個答案的Swift 3版本是什麼? –

3
UIViewController *loginViewController=self.window.rootViewController; 

    UITabBarController *controller=loginViewController.tabBarControllerObj; 

    UIViewController *selectedController=controller.selectedViewController; 

從這裏你將得到選定的視圖控制器。

爲了讓所有的視圖控制器只需更換

NSArray *viewControllers = [controller viewControllers]; 
0

雨燕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 

而且可以檢查可見的ViewController

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