2012-01-16 6 views
5

タブバーコントローラを変更する際にいくつかの問題があります。基本的に私は3つのコントローラを持つUITabBarControllerを持っています。アプリが初めて起動したとき。UItabBarがView Controllerを変更しています

NSMutableArray *muteArray = [[NSMutableArray alloc] init]; 
FirstPage *online; 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{ 

    online =[[FirstPage alloc] initWithNibName:nil bundle:nil]; 


}else{ 

    online =[[FirstPage alloc] initWithNibName:nil bundle:nil]; 
} 

//adding all controllers of tab bar to array 
[muteArray addObjectsFromArray:_navigationCotroller.viewControllers]; 
online.tabBarControllers = [muteArray copy]; 
//replacing object of login controller to after login controller 
[muteArray replaceObjectAtIndex:1 withObject:online]; 


[online release]; 

//setting new controllers to tab bar 
[_navigationCotroller setViewControllers:muteArray animated:YES]; 

[muteArray release]; 

次に、FirstPageコントローラで何か変更してOKを押します。今、私はこれをやって、もう一度コントローラを変更する必要があります。

NSLog(@"Before change Tab Bar cotrollers = %@",self.tabBarController.viewControllers); 

[self.tabBarController setViewControllers:_tabBarControllers animated:YES]; 

NSLog(@"After change Tab Bar cotrollers = %@",self.tabBarController.viewControllers); 

[self.tabBarController.tabBarController setSelectedIndex:1]; 

_tabBarControllersは、アプリが起動したときに、私が保存されたコントローラの配列です。

このコードはコントローラを変更しますが、変更されたコントローラをsetSelectedIndexで開く場合、動作しません。

アイデア?

そして印刷この:

前には、変更タブバーのcotrollers = NULL 変更タブバーのcotrollers = NULL

+0

_navigationCotrollerもコードの入力ミスですか? –

+0

_navigationCotrollerはメインのUITabBarControllerです – Streetboy

+0

そこに「N」文字がありません;)_navigationCotroller - > _navigationCoNtroller –

答えて

10

まず後、私はあなたが意味するものと仮定します。

[self.tabBarController setSelectedIndex:1]; 

が、それはのように聞こえることに失敗しますあなたの_tabBarControllersに問題があります。

何次の出力を実行します。

NSLog(@" _tabBarControllers count = %d", [_tabBarControllers count]); 
NSArray* newArray = [NSArray arrayWithArray:self.tabBarController.viewControllers]; 
NSLog(@" newArray count = %d", [newArray count]); 

をEDIT: するには、次のものが成功していない問題を持つ最初のタブを削除していますか?

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

EDIT 2:

変更してみてください:

[muteArray addObjectsFromArray:_navigationCotroller.viewControllers]; 
online.tabBarControllers = [muteArray copy]; 
[muteArray replaceObjectAtIndex:1 withObject:online]; 

へ:

[muteArray addObjectsFromArray:self.tabBarController.viewControllers]; 
[muteArray replaceObjectAtIndex:1 withObject:online]; 
online.tabBarControllers = [muteArray copy]; 

正直に言うと、私はそれはハードアプリの構造に従うと、オブジェクト参照に見つけています。

+0

_tabBarControllersカウント呼び出す推薦= 3 NEWARRAYカウント= 3 と変更タブバーcotrollers前 =( ""、 「」、 "" ) _tabBarControll作成したコードを見ずに – Streetboy

+0

)変更タブバーのcotrollers =(nullをした後、それは助けが難しいです。 – ader

+0

上記コードがあります: online.tabBarControllers = [muteArray copy]; ここでは、デフォルトで作成されたすべてのコントローラをコピーします。 – Streetboy

関連する問題