我可以模态地呈现作为导航控制器一部分的视图控制器吗?

Posted

技术标签:

【中文标题】我可以模态地呈现作为导航控制器一部分的视图控制器吗?【英文标题】:Can I modally present a view controller that is part of a navigation controller? 【发布时间】:2013-09-05 22:42:42 【问题描述】:

我有一个表格视图和一个地图视图需要显示相同的细节控制器。 细节控制器目前嵌入在带有表格视图的导航控制器中(我相信它仍在使用主细节模板中自动生成的segue)。

我打算让我的地图注释连接到正确的细节控制器,但只是为了测试,我在 MKMapView 上放置了一个 UIButton,并通过情节提要对 detailViewController 进行了模态连接。

当我运行应用程序时,地图视图上的按钮什么也不做,也不会抛出/记录错误。 我知道您不必在导航控制器中以模态方式呈现视图控制器,那么我是否不允许以模态方式呈现作为导航控制器一部分的视图控制器?

我是否需要将细节控制器从情节提要导航控制器中取出并手动将其推送到导航堆栈?

【问题讨论】:

【参考方案1】:

您可以用编码的转场替换故事板转场:

在每个源控制器中创建一个属性destinationVC并初始化它:

@property (nonatomic, strong)  UIViewController* dest;
self.dest = [self.storyboard instantiateViewControllerWithIdentifier:@"destinationID"];

不要忘记在storyboard中为destinationID设置标识符。

继续模态:

[self presentModalViewController:self.dest animated:YES];

推:

[self.navigationController pushViewController:self.dest animated:YES];

当你转回时,你应该小心 dest VC。

if ([self.parentViewController.modalViewController isEqual:self]) 
   //Modal
   [self dismissModalViewControllerAnimated:YES];
 else 
   //Push
   [self.navigationController popViewControllerAnimated:YES];

【讨论】:

这并没有提到我是否可以展示一个嵌入在导航控制器中的模态控制器。并且 push segue 要求父级也位于导航控制器中。 (这是我的解决方法所基于的) 通常你可以在任何地方展示模态,push 只能从导航控制器工作。

以上是关于我可以模态地呈现作为导航控制器一部分的视图控制器吗?的主要内容,如果未能解决你的问题,请参考以下文章

Branch.io 呈现导航控制器

嵌入到导航控制器中的动画根视图控制器以模态方式呈现

模态视图的奇怪位置

以模态方式呈现视图控制器时,导航栏与黑色而不是白色混合

将模态呈现的视图控制器关闭到不同的底层视图控制器

在导航堆栈中以模态方式呈现视图控制器