根视图控制器和模态对话框

时间:2010-06-11 02:11:37

标签: iphone cocoa-touch uinavigationcontroller uitabbarcontroller

在自定义UIViewController中,如果我使用UINavigationController作为根视图初始化的成员self,请执行以下操作:

navController = [[UINavigationController alloc] initWithRootViewController:self];

然后呈现模态对话框不会隐藏屏幕底部的标签栏。结果是,如果用户在显示模式对话框时切换到另一个选项卡,当它们弹回显示模式对话框的选项卡时,后续调用presentModalViewController根本不显示模态对话框,即使我因标签切换而致电dismissModalViewControllerAnimated

如果我初始化UINavigationController而没有设置self作为根控制器,

navigationController = [[UINavigationController alloc] init];

然后按预期隐藏标签栏。我在我的程序中改变了一些东西,这对我来说不再是一个问题,但我不确定我是否理解为什么会这样。如果导航控制器要显示模态对话框,那么以self作为根的导航控制器被认为是不好的做法吗?

1 个答案:

答案 0 :(得分:1)

我从未将自己添加为根控制器

我总是有一些控制器可以将NavigationController.view添加到自身。 然后,第一个将在Navigation层次结构中显示的ViewController作为rootViewController添加。这只是“第一页”的另一个词(开头所有的命名都可能非常令人困惑)。

MyProjectAppDelegate.m中的示例:

UITableViewController *startScreen = [[UITableViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:startScreen];
[window addSubview:navController.view];

你也不应该将UINavigationController与UITabBarController混合使用,如果你想在navigationcontroller“page”中有一个标签栏,你可以构建一个自定义的UITabBarController。

这将向您展示http://github.com/wiredbob/NavTab

的方式

(我在理解所有这个视图/控制器嵌套时遇到了很大的问题,这个项目确实有所不同。你可以说这是我真正学会了如何用iPhone编写iPhone / Mac的代码:DD)