0

我有一个 UITabBarController,我可以通过以下方式添加和删除 UIView,没有任何问题:

添加

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)时,视图似乎保持加载状态,最后一个选项卡上的按钮和标签仍然可见 - 似乎没有办法将所有内容移回应用程序启动时的“无”状态 - 尽管控制器上实际上没有显示任何选项卡。

启动(如您所料)

图片

打开和关闭选项卡(这是我感到困惑的地方) - 你看到选项卡消失但视图仍然打开......?

图片

提前感谢您的任何意见!

4

2 回答 2

0

我还没有测试过这个假设,但我想知道它是否在`moreNavigationController这里发挥作用。在添加任何选项卡之前检查其值,并在删除最后一个选项卡后再次检查。还要看一下the和的visibleViewController属性。moreNavigationControllerUITabBarController

于 2013-04-17T21:15:02.913 回答
0

我制作了一个小测试应用程序,我看到了与您看到的相同的行为。我不知道这是否是选项卡栏控制器删除控制器和视图的方式的意外结果,或者 Apple 是否打算发生这种情况 - 毕竟,你为什么想要黑屏?某些东西似乎保留了指向最后一个视图控制器的强指针,因为如果我有一个删除控制器的按钮(并且它是最后一个),我仍然可以单击该按钮并执行操作。第一次单击时,选项卡栏控制器仍将该控制器列为选定控制器,但如果再次单击,选定控制器为零,但我的视图控制器仍然存在。

摆脱视图的解决方案很简单,只需在从数组中删除最后一个控制器后从其父视图中删除视图。

[self.view removeFromSuperview];

但是,这并没有摆脱视图控制器。有些东西仍然持有对它的引用,到目前为止,我还没有发现是什么在做那件事。

于 2013-04-18T16:36:07.377 回答