给定:
- 呈现 ViewController B 的 ViewController A
- ViewController B 没有引用 ViewController A(隐含的
presentingViewController
属性除外) - ViewController B 调用
dismiss
并且什么都不做
我想要实现的目标:
- ViewController A 想知道 ViewController B 何时被解雇以清理某些状态
限制:
- 我不想使用 KVO
- 我不想以任何方式修改 ViewController B 或其行为
到目前为止我发现了什么:
解散(动画:完成:)
according to the documentation将调用转发给它的presentingViewController
。但似乎dismiss(animated:completion:)
被不 调用,而是一个私有(private)方法_performCoordinatedPresentOrDismiss:animated:
。- iOS documentation on
presentingViewController
具有误导性。它说“呈现的 View Controller 将此属性设置为呈现它的 View Controller ”,但事实并非如此。在 iOS 11 中,这将始终指向present
被调用的 VC 的根父 VC。同样的 documentation onpresentedViewController
具有误导性。它说“调用该方法的 View Controller 将此属性设置为它呈现的 View Controller ”,这不是全部。调用present
的 VC 层次结构中的每个 VC(其所有父 VC 和子 VC)都将指向相同的presentedViewController
。
最佳答案
在您的 Controller A 中,将其命名为 UINavigationControllerDelegate
并使用 navigationController:didShowViewController
标记 Controller B 的呈现 (isControllerBisPresented = true
)。当 B 的 viewDidAppear
时,检查 isControllerBisPresented
是否为真。
关于ios - PresentingViewController 如何收到其 PresentedViewController 自行关闭的通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47350720/