根视图控制器和模式对话框
Posted
技术标签:
【中文标题】根视图控制器和模式对话框【英文标题】:Root view controllers and modal dialogs 【发布时间】:2010-06-11 02:11:36 【问题描述】:在自定义UIViewController
中,如果我有一个成员UINavigationController
,我以self
作为根视图进行初始化,如下所示:
navController = [[UINavigationController alloc] initWithRootViewController:self];
然后显示模式对话框不会隐藏屏幕底部的标签栏。结果是,如果用户在显示模态对话框时切换到不同的选项卡,当他们弹回显示模态对话框的选项卡时,随后对presentModalViewController
的调用根本不会显示模态对话框,即使由于标签切换,我调用了dismissModalViewControllerAnimated
。
如果我初始化 UINavigationController 而不将 self
设置为根控制器,
navigationController = [[UINavigationController alloc] init];
然后标签栏按预期隐藏。我已经在我的程序中进行了更改,因此这对我来说不再是一个真正的问题,但我不确定我是否理解为什么会发生这种情况。如果导航控制器要显示模式对话框,那么将导航控制器以self
作为根是否被认为是不好的做法?
【问题讨论】:
【参考方案1】:我从未将 self 添加为根控制器
我总是有一些控制器将 NavigationController.view 添加到自身。 以及应显示在导航层次结构中的第一个 ViewController,然后我将其添加为 rootViewController。这只是“第一页”的另一种说法(一开始所有的命名都会很混乱)。
MyProjectAppDelegate.m 中的示例:
UITableViewController *startScreen = [[UITableViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:startScreen];
[window addSubview:navController.view];
您也不应该将 UINavigationController 与 UITabBarController 混合使用,如果您想在导航控制器“页面”中有一个标签栏,您可以构建一个自定义的 UITabBarController。
这会告诉你http://github.com/wiredbob/NavTab
(我在理解所有这些视图/控制器嵌套自己时遇到了很大的问题,这个项目确实有所作为。你可以说这是我真正学会了如何使用 :DD 为 iPhone/Mac 编程的代码)
【讨论】:
以上是关于根视图控制器和模式对话框的主要内容,如果未能解决你的问题,请参考以下文章