从 UIView 加载 UINavigation 控制器

Posted

技术标签:

【中文标题】从 UIView 加载 UINavigation 控制器【英文标题】:loading a UINavigation controller from a UIView 【发布时间】:2011-05-04 23:31:57 【问题描述】:

我正在设计一个具有登录屏幕的应用程序。它是一个带有用户名/密码和一个提交按钮的 UIView。一旦用户成功通过身份验证,我想加载一个包含导航控制器和导航栏的新 xib 文件。在栏下方,我想加载一个 tableView 并在我随着它的编程移动时在其他视图之间切换。

我所做的是创建一个继承自 UINavigationController 的新类并组装 xib 文件以包含导航控制器。我将它连接到文件的所有者,并且我正在像这样以模态方式加载导航控制器:

 myNavController* navVC = [[myNavController alloc] initWithNibName:@"navXibFile" bundle:nil];

    [self presentModalViewController:navVC animated:YES];
    [navVC release];

当导航控制器出现时,这可以正常工作。然而,它显示没有标题,即使我已经在 IB 中设置了一个。此外,tableView 的代表是通过 IB 连接的,但我什至看不到空行。我所看到的只是顶部的空导航栏和下方的空白视图(一块)。

感谢您的帮助。

【问题讨论】:

值得一提的是,您不应该继承 UINavigationController。实际上,您可以使用 UINavigationController、UINavigationItem 和 UINavigationControllerDelegate 进行很多自定义。 谢谢西蒙。所以对于这种情况,你会推荐子类化 UIViewController 吗? 确实,UIViewController 完全是子类化的,您可以通过更改 UIViewController 的 UINavigationItem 属性来完成 UINavigationController 的大部分定制。 【参考方案1】:

所以我想通了...首先这是一个设计决定,对吗?应用程序是否由导航控制器管理?如果是这样(这是我的情况),期待主(第一个)视图,即登录页面,您需要做的就是在主视图的 ViewdidLoad 中隐藏导航栏:

[self.navigationController setNavigationBarHidden:YES animated:YES];

一旦用户登录并像这样推送下一个视图:

MainTableViewController* mainTableVC = [[MainTableViewController alloc] 
                                        initWithNibName:@"MainTableViewController" bundle:nil];

[self.navigationController pushViewController:mainTableVC animated:YES];
[mainTableVC release];

最后,在下一个视图控制器的 ViewDidLoad 中:

[self.navigationController setNavigationBarHidden:NO animated:YES];

如果您的应用需要为应用的特定部分提供导航控制器,但不是全部,您将需要使用 VC 来管理它,就像 appDelegate 管理基于示例导航的示例应用一样。

我希望这可以帮助任何人努力思考这里实现的设计模式。

干杯。

【讨论】:

以上是关于从 UIView 加载 UINavigation 控制器的主要内容,如果未能解决你的问题,请参考以下文章

设置 UINavigation 控制器和各种视图加载

奇怪的滚动问题( UIScrollView )

如何添加子视图以覆盖 UINavigation barin UIViewController?

为 navController 设置动画时保留 UIView

如何在不丢失导航栏的情况下将子视图添加到 UINavigation 控制器?

如何从 UIView 加载 UILabel?