我遇到了一个有趣的情况,我有一个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
未显示时,您只能在其中看到UIWindow
。 UITableViewController
仅对最后一次触摸的UITabBarItem
保持可见。
是否有某种UITabBar
视图加载机制我不知道?
答案 0 :(得分:1)
每个视图控制器只能位于一个导航控制器的堆栈上,并且不能位于该堆栈的多个位置。
如果你真的只想使用一个视图控制器来节省内存,我建议你不要使用标签栏控制器,只需使用标签栏视图并将根视图控制器设置为其委托。然后,根视图控制器将直接解释标签栏事件并相应地更改其过滤。
答案 1 :(得分:0)
如果您真的想在一个视图中切换数据集,似乎更好的方法是使用工具栏而不是标签栏。标签栏是关于切换视图的,其他海报注明,所有视图必须是一个视图的子视图和一个导航控制器。使用调用此单个控制器来切换数据集的标签栏更有意义,否则使用UISegmentedControl也可以正常工作(因为您有三个元素,并且最多只能有三个段)。
答案 2 :(得分:0)
不支持在UINavigationController中使用UITabbarController。你可以编写一个普通的UIViewController来模仿UITabbbarController,它可以被推送到视图堆栈。请参阅此SO question。