添加第二个 UINavigationController
Posted
技术标签:
【中文标题】添加第二个 UINavigationController【英文标题】:Add a second UINavigationController 【发布时间】:2014-04-04 19:48:38 【问题描述】:我的第一个 NavigationController 设置了根视图控制器 - PhotoViewController,它是一个带有图像网格的 collectionView。选择图像时,我不想显示第二个带有根控制器的 navigationController - DetailViewControler。
我的第一个 navigationController 是在 appDelegate 中设置的。我真的不明白我应该如何以及在哪里创建第二个。我没有使用IB。目前我的 DetailViewcontroller viewDidLoad 中有这个:
DetailViewController *detailView = [[DetailViewController alloc] init];
self.detailController = [[UINavigationController alloc] initWithRootViewController:detailView];
但是当我试图推动一个新的控制器时,什么也没有发生。我猜我的代码放错地方了。
当我尝试从 PhotoViewController 模态显示第二个控制器时,出现错误(尝试显示 nil viewController)。
【问题讨论】:
为什么要展示第二个导航控制器?为什么不在选择图像后显示详细视图,以便按下返回将返回 PhotoViewController? 我构建这个应用程序纯粹是为了学习。我只是不想学习它是如何完成的。 【参考方案1】:通常的想法是拥有一个包含其他 VC 并允许您在其他 VC 之间导航的导航 VC。在您描述的情况下,您不会创建另一个导航 VC。相反,只创建细节 VC 并将其推送到现有的导航 VC...
// assuming self is a view controller contained by a navigation controller
self.detailController = [[DetailViewController alloc] init];
[self.navigationController pushViewController:self.detailController animated:YES];
【讨论】:
那么多个navigationControllers是个坏习惯?我正在使用[self.navigationController presentViewController:detailView animated:YES completion:nil];
以模态方式呈现detailVC,但是当我尝试将某些内容推送到detailVC 上时,例如commentVC,它不起作用 - CommentViewController *commentView = [[CommentViewController alloc] init]; [self.navigationController pushViewController:commentView animated:YES];
在视图以模态方式呈现后,是否可以在同一个控制器中推送某些内容?我过去曾使用 IB 和多个 navigationVC 完成此操作。
并不总是一个坏习惯。如果你有一个主视图,并且想要呈现一个详细视图,那么推送到主现有的导航 vc 是很好的。如果您正在开始一个全新的流程,那么全新的 nav vc(具有新根)的“模态”推送是可以的。但是第二种情况比较少见,而且你的情况听起来更像是主细节。
谢谢,我的情况是第二个。忘了在我的问题中提到这一点。【参考方案2】:
使用父视图控制器作为初始视图控制器并将导航控制器添加为子控制器,然后在它们之间进行转换。请参阅我写的这篇博文:http://sketchytech.blogspot.co.uk/2012/09/container-view-controllers-parent-view.html
【讨论】:
以上是关于添加第二个 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章