假设:
presentingViewController
属性除外)dismiss
而不执行任何其他操作我想要实现的目标:
限制:
到目前为止我发现了什么:
dismiss(animated:completion:)
according to the documentation将呼叫转发给presentingViewController
。但似乎dismiss(animated:completion:)
不被调用,而是私有方法_performCoordinatedPresentOrDismiss:animated:
。presentingViewController
具有误导性。它说“所呈现的视图控制器将此属性设置为呈现它的视图控制器”,但事实并非如此。在iOS 11中,这将始终指向调用present
的VC的根父VC。同样地,documentation on presentedViewController
具有误导性。它说“调用方法的视图控制器将此属性设置为它所呈现的视图控制器”,这不是整个故事。调用present
的VC(其所有父VC和子VC)层次结构中的每个VC都将指向相同的presentedViewController
。答案 0 :(得分:0)
在您的控制器A中,将其标记为UINavigationControllerDelegate
并使用navigationController:didShowViewController
标记控制器B(isControllerBisPresented = true
)的显示。当B的viewDidAppear
时,请检查isControllerBisPresented
是否为真。
答案 1 :(得分:0)
一个丑陋的解决方法是使用在deinit
中执行某项操作的中间人。因此A
显示M
将B
嵌入为childVC。当B
自行解散时,M
也会被隐式解雇,因此deinit
方法应该被调用。在那里它可以通知A
它被解雇了。
这很脆弱,因为某些参考周期可能会阻止M
被解除分配,从而导致A
无法收到通知。所以我宁愿找到更好的解决方案。