带有UITabBarController的UITableViewController不会显示

时间:2009-03-19 16:56:00

标签: iphone cocoa-touch uitableview uitabbarcontroller

我遇到了一个有趣的情况,我有一个3个UITableViewController的iPhone应用程序,每个都显示或多或少相同的数据(你可以说它是过滤的问题)。到目前为止,我有3个单独的NIB,每个都有自己的控制器,另外UITableViewController位于UINavigationController内,以便按钮位于顶部。

现在要优化应用程序并减少它的占用空间,我将所有逻辑打包到一个公共控制器(UITableViewController)并且只留下一个NIB。公共控制器将负责过滤数据,并指向正确的数据。

因此,我将相同的公共控制器加载到3个导航控制器:

navControllerA = [[UINavigationController alloc] initWithRootViewController: commonTableController];

并将这些导航控制器添加到UITabBarController

navigationControllersArray = [NSArray arrayWithObjects: navControllerA, navControllerB, navControllerC, nil];
[tabController setViewControllers:[NSArray arrayWithArray:navigationControllersArray]];

现在一切正常,标签显示,表格视图显示。但是,当您触摸下一个UITabBarItem并返回前一个UITableViewController未显示时,您只能在其中看到UIWindowUITableViewController仅对最后一次触摸的UITabBarItem保持可见。

是否有某种UITabBar视图加载机制我不知道?

3 个答案:

答案 0 :(得分:1)

每个视图控制器只能位于一个导航控制器的堆栈上,并且不能位于该堆栈的多个位置。

如果你真的只想使用一个视图控制器来节省内存,我建议你不要使用标签栏控制器,只需使用标签栏视图并将根视图控制器设置为其委托。然后,根视图控制器将直接解释标签栏事件并相应地更改其过滤。

答案 1 :(得分:0)

如果您真的想在一个视图中切换数据集,似乎更好的方法是使用工具栏而不是标签栏。标签栏是关于切换视图的,其他海报注明,所有视图必须是一个视图的子视图和一个导航控制器。使用调用此单个控制器来切换数据集的标签栏更有意义,否则使用UISegmentedControl也可以正常工作(因为您有三个元素,并且最多只能有三个段)。

答案 2 :(得分:0)

不支持在UINavigationController中使用UITabbarController。你可以编写一个普通的UIViewController来模仿UITabbbarController,它可以被推送到视图堆栈。请参阅此SO question