2

我創建了一個UITabBarController,如下所示,並且推送了一個navigationController,但是現在我無法設置標籤欄項的標題等等,因爲tabbarcontroller是NULL。self.tabBarController爲NULL

請你能告訴我我哪裏出錯了。

UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
     LoggedInFeedNavigationController *lvc = [[LoggedInFeedNavigationController alloc] initWithAccount:account]; 
     [tabBarController setViewControllers:[NSArray arrayWithObject:lvc]]; 
     [tabBarController setSelectedIndex:0]; 
     [self presentModalViewController:tabBarController animated:YES]; 
     [tabBarController release]; 
     [lvc release]; 
+0

你是如何試圖訪問它? – joshpaul

+0

在LoggedInFeedNavigationController中,self.tabBarController。 –

回答

6

documentation爲tabBarController我看到以下

如果沒有標籤欄是本或 接收機是模態的視圖,這 屬性是零。

在評論中說,你從LoggedInFeedNavigationController內調用self.tabBarController,我認爲它應該可以正常工作。但是,您正在以模態方式顯示標籤欄,並且如果文檔意味着即使它在UITabBarController中作爲模式視圖,那麼這也是您的問題。

+0

你有什麼建議來解決這個問題? –

+1

如果你絕對需要訪問tabBarController,請考慮在你的'LoggedInFeedNavigationController'內創建一個'@property(nonatomic,retain)UITabBarController * modalTabBarController'屬性,並在顯示它之前進行設置。我沒有測試過這個,所以確保它不做循環引用(在dealloc方法中放置一個斷點)。如果是這樣,請將其更改爲指定,如果您可以保證tabBarController將與您的控制器一樣長久。 – Joe

+0

另一種我更喜歡的方法是創建一個協議,並讓類創建標籤欄和'LIFNC'符合它,並管理它從代理回調中正確創建的tabBarController。 – Joe

0

它看起來像我喜歡你釋放你的標籤欄控制器,當你還沒有完成它。你只需要初始化一次,然後只有在dealloc方法中完成後才能釋放它。

0

喬是完全正確的。自定義賽段也是如此。 (例如:SWRevealViewController等)

這是我根據喬的回答和蘋果文檔使它工作的。 在YourTabBarViewController.h文件中添加以下內容:

@property (nonatomic, retain) UITabBarController * myTabBarController; 

然後在YourTabBarViewController.m文件中viewDidLoad中添加以下內容:

self.myTabBarController = self; 
self.myTabBarController.delegate = self;