我正在尝试使用故事板。我正在添加标签栏控制器和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];
然后设置了标签栏图像,但未显示导航。
有没有办法直接从故事板上获取导航控制器,或者有什么方法可以显示标签栏图像?
答案 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行。