动态更改故事板中的标签栏

时间:2014-03-27 06:51:47

标签: storyboard uitabbarcontroller tabbar

我正在尝试使用故事板。我正在添加标签栏控制器和3个viewcontrollers。在第一个视图中我有一个按钮,在该按钮上单击我想删除第三个选项卡,以便有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是我的代码链接。

1 个答案:

答案 0 :(得分:1)

您的问题与我预期的问题无关,而是直接修改UITabBarController上的标签栏,位于文件FirstViewController.m的第40行:

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

注释此行,第67行的代码将正确删除最后一个标签。如果名称为" Item"的选项卡,第84行的代码也会崩溃。找到了。

要查找下次崩溃的位置,请转到断点导航器(Cmd + 7或视图>导航器>显示断点导航器),单击左下角的加号图标,添加异常断点。自动生成新断点。如果使用此断点运行代码,它将停在第40行。

enter image description here