2013-04-17 51 views
0

我有一個的UITabBarController,而我添加和刪除UIViews不以下列方式的任何問題:駁回最後一個標籤視圖控制器

添加

FileTabViewController* newTab = [[FileTabViewController alloc] initWithNibName:@"File" bundle:nil]; 
NSMutableArray* array = [NSMutableArray arrayWithArray:bar.viewControllers]; 
[array addObject:newTab]; 
[bar setViewControllers:array animated:YES]; 
[bar setSelectedIndex:bar.viewControllers.count-1]; 

刪除(內FileTabViewConroller.m)

NSMutableArray* newArray = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers]; 
[newArray removeObject:self]; 
[self.tabBarController setViewControllers:newArray animated:YES]; 

此代碼完全按照我的預期,但有一個我不能解釋的那種無聊。當應用程序啓動並且視圖控制器數組爲空(無)時,則會有(如您所期望的)在選項卡視圖控制器中顯示沒有視圖。當我添加視圖時,選項卡會正確增加,但是當我刪除最後一個(即第1個數字的索引0)時,視圖出現以保持加載狀態,最終選項卡上的按鈕和標籤仍然可見 - 似乎有沒有辦法將應用程序啓動時返回到'無'狀態的所有內容都刪除 - 儘管實際上控制器上沒有顯示任何選項卡。

啓動(如你所期望)

image

打開和關閉一個標籤(這是我弄糊塗) - 你看到的標籤消失,但認爲保持開放......?

image

預先感謝任何輸入!

+0

你是否曾經將newArray設置爲標籤欄控制器的viewControllers數組? – rdelmar

+0

是的,我只是沒有包括那一行...... – SteveDolphin23

回答

0

我做了一個小測試應用程序,我看到你看到相同的行爲。我不知道這是否是標籤欄控制器刪除控制器和視圖的方式的意外後果,或者Apple是否打算實現此目的 - 畢竟,您爲什麼要黑屏?有些東西似乎保留了最後一個視圖控制器的強指針,因爲如果我有一個刪除控制器的按鈕(它是最後一個控制器),我仍然可以單擊該按鈕並執行操作。當我第一次點擊它時,標籤欄控制器仍將該控制器列爲選定的控制器,但如果再次單擊,所選控制器爲零,但我的視圖控制器仍然存在。

擺脫視圖的解決方案很簡單,只需從數組中刪除最後一個控制器後從其超級視圖中刪除視圖即可。

[self.view removeFromSuperview]; 

但是,這並沒有擺脫視圖控制器。有些東西還在引用它,到目前爲止,我還沒有發現那是什麼。

+0

這很有趣,不是!你是對的,removeFromSuperview會將視圖重置爲黑色,謝謝。 – SteveDolphin23

+0

但是,我越想到這一點,也許你是對的,也許初始視圖根本不應該是黑屏,因此在關閉所有選項卡之後,視圖也不應該是那麼糟糕的UI ...? – SteveDolphin23

+0

這不是很吸引人。我最初想知道爲什麼你想這樣做。但它仍然是一個有趣的問題。 –

0

我沒有測試過這個假設,但我想知道`moreNavigationController是否會在這裏發揮作用。在添加任何選項卡之前檢查其值,並在刪除最後一個選項卡後再次檢查其值同時看看moreNavigationControllerUITabBarControllervisibleViewController財產。

+0

我想這是可能的 - 但我現在正在打開和關閉一個標籤,所以看起來不太可能,但我會快速查看。 – SteveDolphin23

相關問題