如果从过流上下文视图控制器呈现,则呈现视图控制器错误

Posted

技术标签:

【中文标题】如果从过流上下文视图控制器呈现,则呈现视图控制器错误【英文标题】:Wrong presenting view controller if presented from an over-current-context view controller 【发布时间】:2017-05-08 17:17:00 【问题描述】:

所以我有 3 个视图控制器的问题。我有视图控制器 A,它显示了一个视图控制器 B,其演示风格为 currentContext。此视图控制器 B 以默认呈现样式呈现视图控制器 C。像这样的东西: presents over current context presents regularly VC A -------------------------------> VC B --------------------> VC C

问题是,当我想关闭视图控制器 C 时,presentingViewController 属性指向 VC A 而不是 VC B,而且,没有调用 VC B 的 viewWillAppear,而 viewWillAppear在 VC A 中。

我无法使用dismiss(animated flag: Bool, completion: (() -> Void)? = nil)的完成块,因为VC B无法控制VC C的解雇。它是一个可以从应用程序中的多个点开始的流程,所以导航的管理这个流程是在一个单独的类中完成的。

这里发生了什么?我真的需要调用VC B的viewWillAppear

【问题讨论】:

您愿意发布 3 个视图控制器的代码吗?没有它就很难为您提供帮助。 【参考方案1】:

@Kinopio - 我猜你面临的问题是因为你正在从 VC A 中解散控制器,所以这里 self 指向当前类。您需要将消息传递给 VC B,然后从那里解雇。

喜欢

//code in VC A
func dismissViewControllerNoC()
 viewControllerNoB.dismiss()


//code in VC B
func dismiss()
dismiss(animated flag: Bool, 
  completion: (() -> Void)? = nil)

【讨论】:

以上是关于如果从过流上下文视图控制器呈现,则呈现视图控制器错误的主要内容,如果未能解决你的问题,请参考以下文章

你如何在 UIKit 视图控制器和它呈现的 SwiftUI 视图之间共享数据模型?

从打开的导航抽屉呈现视图控制器时挂起

无法在标签栏控制器的顶部完全呈现模态视图控制器

如果当前视图控制器被呈现并推送,如何展开到正确的视图控制器?

从 UIScrollView 子视图呈现故事板 UIViewController

addSubview与呈现模式ViewController之间的区别?