UItabBar更改视图控制器

时间:2012-01-16 10:22:40

标签: iphone objective-c ios uitabbarcontroller uitabbar

我在更改标签栏控制器时遇到一些困难。基本上我有UITabBarController与3个控制器。应用程序启动时的第一次我改变了一个这样的控制器:

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打开更改的控制器时,它不起作用。

有什么想法吗?

打印出来:

更改前Tab Tab cotrollers = NULL 更改后Tab Bar cotrollers = NULL

1 个答案:

答案 0 :(得分: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]);

编辑: 以下是否成功删除了第一个选项卡而没有问题?

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

编辑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];

说实话,我发现很难关注你的app结构和对象引用。