0

我遇到了一个有趣的情况,我有一个 iPhone 应用程序,UITableViewController每个 3 秒显示或多或少相同的数据(你可以说这是过滤问题)。迄今为止,我为此有 3 个独立的 NIB,每个都有自己的控制器,此外,为了顶部的按钮,UITableViewControllers 在里面。UINavigationController

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

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

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

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

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

现在一切都很好,选项卡显示,表格视图显示。但是,一旦您触摸下一个UITabBarItem并返回上一个,UITableViewController则不会显示,您只能UIWindow在其位置看到 a。仅在UITableViewController最后一次触摸时保持可见UITabBarItem

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

4

2 回答 2

1

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

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

于 2009-03-19T20:57:38.917 回答
0

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

于 2009-03-20T22:17:34.723 回答