2014-03-27 47 views
0

我正在嘗試與故事板一起工作。我正在添加標籤欄控制器和3個視圖控制器。在第一個視圖中,我有一個按鈕,然後在該按鈕上點擊我想刪除第三個選項卡,這樣就會出現2個選項卡。動態更改故事板中的標籤欄

我使用下面的代碼刪除最後一個標籤

NSMutableArray *viewControllersCopy = [[self.tabBarController viewControllers] mutableCopy]; 
[viewControllersCopy removeObjectAtIndex:2]; 
NSArray *modifiedViewControllers = [[NSArray alloc] initWithArray:viewControllersCopy]; 
[self.tabBarController setViewControllers:modifiedViewControllers animated:NO]; 

,但它是通過給錯誤

直接修改的標籤欄控制器管理的標籤欄崩潰不允許

我看過很多鏈接,但無法找到任何正確答案。

感謝frin。

現在我已更新我的代碼以使用導航控制器。以前它是處理查看控制器。 我使用下面的代碼來改變標籤欄

UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main_iPhone" 
               bundle:nil]; 
UIViewController* vc1 = [sb instantiateViewControllerWithIdentifier:@"ViewController"]; 
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc1]; 
NSMutableArray *viewControllersCopy = [[self.tabBarController viewControllers] mutableCopy]; 
[viewControllersCopy replaceObjectAtIndex:0 withObject:nav]; 
NSArray *modifiedViewControllers = [[NSArray alloc] initWithArray:viewControllersCopy]; 
[self.tabBarController setViewControllers:modifiedViewControllers animated:NO]; 

它工作正常,但是當我設置標籤欄圖像沒有設置。

如果我使用

UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main_iPhone" 
               bundle:nil]; 
UIViewController* vc1 = [sb instantiateViewControllerWithIdentifier:@"ViewController"]; 
NSMutableArray *viewControllersCopy = [[self.tabBarController viewControllers] mutableCopy]; 
[viewControllersCopy replaceObjectAtIndex:0 withObject:vc1]; 
NSArray *modifiedViewControllers = [[NSArray alloc] initWithArray:viewControllersCopy]; 
[self.tabBarController setViewControllers:modifiedViewControllers animated:NO]; 

然後標籤欄圖像設置,但導航不顯示。

有沒有辦法從故事板直接導航控制器或有任何方式來顯示標籤欄圖像?

https://github.com/mayankpurwar/sample是我的代碼鏈接。

+0

你確定你使用的是最新的Xcode?這段代碼對我來說工作得很好。該錯誤對您發佈的代碼而言似乎不合邏輯,通常在直接修改UITabBarController的tabbar時會出現此錯誤,而不是更改viewcontrollers數組。 – frin

+1

我正在使用最新的xcode。有沒有辦法上傳代碼?我可以上傳我的代碼給你看。 –

+1

我要發送我的代碼鏈接https://github.com/mayankpurwar/sample –

回答

1

你的問題是,因爲我與你在問題發佈的代碼不是預期,而是直接修改上的UITabBarController使用TabBar,第40行中的文件FirstViewController.m:

[self.tabBarController.tabBar setItems:[NSArray arrayWithObjects:[arr objectAtIndex:0],[arr objectAtIndex:1], nil]]; 

評論這條線,代碼爲第67行將正確刪除最後一個選項卡。如果找到名稱爲「Item」的選項卡,第#84行的代碼也會崩潰。

要找到下一次崩潰的位置,請轉到Breakpoint Navigator(Cmd + 7或View> Navigators> Show Breakpoint Navigator),單擊左下角的加號圖標,添加異常斷點。一個新的斷點是自動創建的。如果你用這個斷點運行你的代碼,它將停在第40行。

enter image description here

+1

您是對的。謝謝回答。當我更換顯示黑色時,我還有一個問題。我更新了FirstViewController.m中的一些代碼。請檢查並告訴我爲什麼顯示黑色。 –