【发布时间】:2010-04-15 06:08:55
【问题描述】:
我正在尝试编写一个使用导航栏和标签栏的应用程序(我正在收集)这是一种不寻常的方式。
基本上,我有几个“页面”(“主页”、“设置”等),每个都有自己的标签。我还想让“主页”页面是导航栏的根视图,而其他页面是导航栏的二级视图。也就是说,我应该能够通过单击相应的标签栏项来导航到任何页面,并且应该能够通过单击导航栏的后退按钮从任何其他页面导航到主页。
目前,我有一个 UINavigationBar(通过 UINavigationController)和一个 UITabBar(通过 UITabController)作为 UIView 的子项。各个页面的视图控制器被设置为标签控制器的viewControllers属性,主页的控制器也被设置为导航控制器的根视图。每个页面视图的标记都设置为其在选项卡控件中的索引。我在标签控制器的didSelectViewController 委托方法中有以下逻辑:
- (void) tabBarController:(UITabBarController*) tabBarController
didSelectViewController:(UIViewController*) viewController
{
if ([navController.viewControllers count] > 1)
[navController popViewControllerAnimated:NO];
[navController pushViewController:viewController animated:YES];
}
另外,在导航控制器的didShowViewController 委托方法中,我有以下代码:
- (void) navigationController:(UINavigationController *) navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
tabController.selectedIndex = viewController.view.tag;
}
出现的问题是,当我运行此程序时,导航栏、标签栏和主页都显示正常,但标签栏不会响应输入 - 我无法选择其他标签。
我认为将标签栏作为导航控件的子级更为常见,反之亦然。这似乎不适合我的方法,因为我不想每次父控件发生更改时都必须单独创建从属控件 - 例如:每次导航栏更改时重新创建标签栏。
有人对出了什么问题以及如何解决问题有建议吗?我可能遗漏了一些明显的东西,但不管它是什么,我似乎都找不到它。谢谢!
编辑:我猜这与两个控制器都试图拥有页面控制器的所有权有关,但我终其一生都无法找到解决方法。
【问题讨论】:
标签: iphone uinavigationcontroller uitabbarcontroller