【发布时间】:2018-05-01 05:38:00
【问题描述】:
鉴于:
- 呈现 ViewController B 的 ViewController A
- ViewController B 没有对 ViewController A 的引用(隐含的
presentingViewController属性除外) - ViewController B 对自己调用
dismiss并且什么都不做
我想要达到的目标:
- ViewController A 想知道 ViewController B 何时被解雇以清理某些状态
限制:
- 我不想使用 KVO
- 我不想以任何方式修改 ViewController B 或其行为
到目前为止我发现了什么:
-
dismiss(animated:completion:)according to the documentation 将呼叫转发到其presentingViewController。但似乎dismiss(animated:completion:)被不调用,而是一个私有方法_performCoordinatedPresentOrDismiss:animated:。 - iOS documentation on
presentingViewController具有误导性。它说“呈现的视图控制器将此属性设置为呈现它的视图控制器”,但事实并非如此。在 iOS 11 中,这将始终指向调用present的 VC 的根父 VC。同样,documentation onpresentedViewController具有误导性。它说“调用该方法的视图控制器将此属性设置为它呈现的视图控制器”,这不是全部。调用present的 VC(其所有父 VC 和子 VC)层次结构中的每个 VC 都将指向相同的presentedViewController。
【问题讨论】:
-
可能在 ViewController B 的
viewWillDisappear或viewDidDisappear中发送通知? -
不幸的是我无法修改 B。我可以将它包装在 containerVC 中,如下面的答案中所述,但也不是很好
-
或者子类化它?
-
没错,这也是可能的
标签: ios uiviewcontroller coordinator-pattern