2012-02-10 107 views
2

我正在開發一個作爲基於TabBarController的應用程序開始的項目,而且大部分仍然是,但一些需求已更改,我們需要將初始視圖控制器作爲應用程序其餘部分的入口點 - 在給定身份驗證並加載了一些內容之後,它將在標籤欄控制器的主窗口中被替換。從XIB加載UITabBarController不包含任何來自XIB的內容

最初的UITabBarController是MainWindow.xib的一個組件,並且它的所有根控制器都設置了根視圖控制器,並且一切都很順利。我想我可以簡單地從MainWindow.xib中提取的UITabBarController組成部分,把它放在自己的CustomTabBarController.xib,然後運行

[self setTabBarController:[[[UITabBarController alloc] initWithNibName:@"CustomTabBarController" bundle:nil] autorelease]]; 
[_tabBarController setDelegate:self]; 
[self.window addSubview:_tabBarController.view]; 

然而,除了獲得預構建的標籤欄控制器我所料,我得到一個完全空的標籤欄控制器。

我錯過了什麼嗎?爲什麼我無法從筆尖加載預構建的UITabBarController?

回答

5

試試這個:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"CustomTabBarController" owner:nil options:nil]; 
UITabBarController *controller = [nibContents objectAtIndex:0]; 

[self setTabBarController:controller]; 
[_tabBarController setDelegate:self]; 
[self.window addSubview:_tabBarController.view]; 

這有點棘手解釋爲什麼,但它與文件的所有者是如何工作要做。如果標籤欄控制器在nib文件中定義,則無法將nib文件加載到標籤欄控制器中。

筆尖總是必須由一個對象在筆尖中定義的對象的上方加載 - 所以應用程序委託可以加載視圖控制器,視圖控制器可以加載視圖等。但視圖控制器(包括TabBarController)無法加載自身。

+0

這是我最終做的。因爲我實際上有一個自定義的UITabBarController子類,它有一些輔助方法,所以我最終重載了'-init'方法來使用'[[nibContents objectAtIndex:0] retain]'而不是'[super init]'。但是,如果不調用retain,則在子類初始化後不久就會釋放它。謝謝你的提示! – 2012-02-16 14:51:29