在自定义UIViewController
中,如果我使用UINavigationController
作为根视图初始化的成员self
,请执行以下操作:
navController = [[UINavigationController alloc] initWithRootViewController:self];
然后呈现模态对话框不会隐藏屏幕底部的标签栏。结果是,如果用户在显示模式对话框时切换到另一个选项卡,当它们弹回显示模式对话框的选项卡时,后续调用presentModalViewController
根本不显示模态对话框,即使我因标签切换而致电dismissModalViewControllerAnimated
。
如果我初始化UINavigationController而没有设置self
作为根控制器,
navigationController = [[UINavigationController alloc] init];
然后按预期隐藏标签栏。我在我的程序中改变了一些东西,这对我来说不再是一个问题,但我不确定我是否理解为什么会这样。如果导航控制器要显示模态对话框,那么以self
作为根的导航控制器被认为是不好的做法吗?
答案 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)