我在更改标签栏控制器时遇到一些困难。基本上我有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
答案 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结构和对象引用。