使用 segues 在 NavigationController 中嵌入 UIViewController
Posted
技术标签:
【中文标题】使用 segues 在 NavigationController 中嵌入 UIViewController【英文标题】:Embed a UIViewController in a NavigationController using segues 【发布时间】:2013-04-21 15:25:26 【问题描述】:我有一个 viewController,通常(最常)通过使用 push segue 访问。这个 viewController 需要嵌入到 UINavigationController 中。所以通常,这没有问题。 push segue 管理 viewController 的推送,因此 viewController 拥有它的 UINavigationController。
我的问题是,在某些情况下,我想使用模态 segue 呈现相同的视图控制器。当我这样做时,viewController 没有嵌入到导航控制器中。有没有办法使用 segues 做到这一点?
我知道这可以通过创建 UINavigationController,将 rootView 设置为 viewController,然后以模态方式呈现,从而完全在代码中完成。这可以使用这样的代码来完成:
MyViewController *viewController = [[MyViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self presentModalViewController:navController animated:YES];
但是除了使用 Segues 之外,我该如何做同样的事情呢?
更新
为了更清楚起见,这里有一些代码来补充我如何在 prepareForSegue 方法中使用接受的答案。
使用模态转场时
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue destinationViewController] isEqualToString:@"Modal to MyVC"])
UINavigationController *nav = [segue destinationViewController];
MyViewController *vc = [nav topViewController];
//setup vc
使用 Push Segue 时
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue destinationViewController] isEqualToString:@"Push to MyVC"])
MyViewController *vc = [segue destinationViewController];
//setup vc
【问题讨论】:
这很好用!使用模态segues卡住了,这帮助了我。 【参考方案1】:在您的 Storyboard 中,您可以通过选择 View Controller 然后从顶部的菜单中选择 Editor->Embed In->Navigation Controller
来将 ViewController 嵌入到 Navigation Controller 中。从另一个视图控制器,您可以控制拖动到此导航控制器以设置modal
segue。您还可以控制拖动到原始 View Controller 以在没有 Navigation Controller 的情况下为其设置 segues。
【讨论】:
以上是关于使用 segues 在 NavigationController 中嵌入 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章
在 segue.destination 中使用 ViewController 变量
Segue 和使用 instantiateViewController 有啥区别?
IOS/Objective-C:在没有 Storyboard Segue 的情况下可以在模态转换中使用自定义 Segue?