如果当前视图控制器被呈现并推送,如何展开到正确的视图控制器?
Posted
技术标签:
【中文标题】如果当前视图控制器被呈现并推送,如何展开到正确的视图控制器?【英文标题】:How to unwind to the right view controller if current one is presented AND pushed? 【发布时间】:2018-02-03 19:12:24 【问题描述】:我有一个视图控制器,比如说 A,它由其他三个视图控制器访问,比如说 B、C 和 D。
B 以模态方式呈现UIViewController
A。
C 和 D 是 UINavigationController
的一部分,因此推送视图控制器 A。
如果他们都有模态序列,我可以做一个switch(presentingViewController)
来确定谁是我应该unwind
的视图控制器。问题是,由于其中两个位于导航堆栈(B 和 C)中,它们永远不会是 presentingViewController
。
我该如何解决这个难题?
【问题讨论】:
您使用的是故事板和转场吗?如果是这样,那么您需要做的就是在每个视图控制器中实现相同的展开方法名称,展开转场将在运行时确定它需要去哪里;见developer.apple.com/library/content/technotes/tn2298/… 【参考方案1】:检查A
中是否存在导航控制器。如果是,你会pop
,如果不是,你会dismiss
。
【讨论】:
我需要做一些自定义逻辑,具体取决于我要放松到哪一个。因此,仅弹出/关闭是不够的 听起来A
做得太多了。你可以让一个委托在A
的viewWillDisappear
上触发B
、C
和D
听。不知道你的整个逻辑很难说。
你认为这个答案 (***.com/questions/13898324/…) 的委托模式会更好还是你的?
在所有父控制器的 prepareSegue 函数中编写相同的代码是多余的。代表在这里听起来像是一个更好的解决方案。如果在这两种情况下都只需要一行,我认为这并不重要。以上是关于如果当前视图控制器被呈现并推送,如何展开到正确的视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章
将 NavigationController 添加到当前视图
如何在一种情况下推送视图控制器,但在另一种情况下以模态方式呈现它?
当每个新的视图控制器被推送时,调整导航控制器的大小以模态 UIModalPresentationFormSheet 呈现