2014-04-02 92 views
15

我正在開發一個基於UITabbar和視圖層次結構的應用程序,如下所示。從UIVIewController訪問UITabBarController

的UITabBarController ----> ----的UINavigationController>的UIViewController

我需要從UIIVewController訪問的UITabBarController。但以下屬性總是返回nil。

self.tabBarController和self.navigationController.tabBarController

有沒有直接從孩子的viewController訪問Tabbarcontroller不使用的AppDelegate的方法嗎?

@implementation HomeViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     self.title = @"Home"; 
     self.navigationItem.title = @"Home"; 

     self.tabBarItem.image = [UIImage imageNamed:@"TabBarHome"]; 

     UITabBarController *tab = self.tabBarController; 
     UITabBarController *tab1 = self.navigationController.tabBarController; 
     UITabBarController *tab2 = self.navigationController.presentingViewController; 



    } 
    return self; 
} 
+1

它可能只使用'從嵌入在'UITabBarController'任何'UIViewController' self.tabBarController',檢查@ Rashad的回答低於 – nburk

回答

23

利用層次結構所使用:

enter image description here

我可以不存取權限問題UITabBarControllerViewController有:

self.tabBarController

將您的自定義初始化viewDidLoadviewDidAppear

那麼對於舒爾你可以用self.tabBarController

另一種方式訪問​​TabBarController到到達您的TabBarController是:

UITabBarController *tabBarController = (UITabBarController *)[[[UIApplication sharedApplication] delegate] window].rootViewController; 

但它是你的情況完全沒有必要。

編輯:

如果你用XIB1工作,那麼你已經在你的AppDelegate創造了一個TabBarController編程。我相信你有這樣的:

self.tabBarController = [[UITabBarController alloc] init];

然後,你可以把它在你的ViewController:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate] 
UITabBarController *tabBarController = appdelegate.tabBarController; 
+1

您正在向ViewDidLoad提供幫助。初始化期間我們無法訪問它的任何特定原因? – rustylepord

+0

這不適用於Xcode 7測試版6.任何人都可以證實這一點嗎? –

+0

這不適用於xCode 9.這個基本的東西被搞砸了:( – Dibzmania

3

你做錯了。

我有一個應用程序與你的相同。我可以從viewDidLoad訪問tabbar。

試試這個:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self.tabBarController setSelectedIndex:1]; 
} 

希望這有助於.. :)

相關問題