我有一个UITabBarController,我通过以下方式添加和删除UIViews没有任何问题:
添加
FileTabViewController* newTab = [[FileTabViewController alloc] initWithNibName:@"File" bundle:nil];
NSMutableArray* array = [NSMutableArray arrayWithArray:bar.viewControllers];
[array addObject:newTab];
[bar setViewControllers:array animated:YES];
[bar setSelectedIndex:bar.viewControllers.count-1];
删除(在FileTabViewConroller.m中)
NSMutableArray* newArray = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers];
[newArray removeObject:self];
[self.tabBarController setViewControllers:newArray animated:YES];
这段代码完全符合我的预期,但有一些异常,我无法解释。当应用程序启动并且视图控制器数组为空(nil)时,(如您所料)没有显示选项卡视图控制器中显示的视图。当我添加视图时,选项卡正确增加,但是当我删除最后一个(即计数1的索引0)然后视图出现以保持加载时,最终选项卡上的按钮和标签仍然可见 - 似乎无法将所有内容移回到应用程序启动的“nil”状态 - 尽管控制器上实际上没有显示任何选项卡。
启动(如您所料)
打开和关闭标签(这是我感到困惑的地方) - 您看到标签消失但视图仍然打开...?
提前感谢任何输入!
答案 0 :(得分:0)
我没有测试过这个假设,但我想知道`moreNavigationController
是否会在这里发挥作用。在添加任何选项卡之前检查其值,并在删除最后一个选项卡后再次检查。另请查看visibleViewController
和moreNavigationController
的{{1}}属性。
答案 1 :(得分:0)
我做了一个小测试应用程序,我看到了你所看到的相同行为。我不知道这是否是标签栏控制器删除控制器和视图的方式的意外后果,或Apple是否打算这样做 - 毕竟,为什么你想要一个黑屏?似乎有一个强大的指针指向最后一个视图控制器,因为如果我有一个删除控制器的按钮(它是最后一个),我仍然可以单击该按钮并让动作发生。第一次单击它时,标签栏控制器仍然将该控制器列为所选控制器,但如果我再次单击,则所选控制器为零,但我的视图控制器仍然存在。
删除视图的解决方案很简单,只需在从阵列中删除最后一个控制器后从其超级视图中删除视图。
[self.view removeFromSuperview];
然而,这并没有摆脱视图控制器。还有一些东西仍在引用它,到目前为止,我还没有发现它在做什么。