在iOS 13之前,提供了用于覆盖整个屏幕的视图控制器。并且,在关闭后,将viewDidAppear
执行父视图控制器功能。
现在,iOS 13默认将表单显示为视图控制器,这意味着卡将部分覆盖基础视图控制器,这意味着viewDidAppear
不会被调用,因为父视图控制器从未真正消失过。
有没有一种方法可以检测到所显示的视图控制器工作表已被解雇?我可以在父视图控制器中重写某些其他功能,而不是使用某种委托?
有没有一种方法可以检测到所显示的视图控制器工作表已被解雇?
是的。
我可以在父视图控制器中重写某些其他功能,而不是使用某种委托?
不,“某种委托”是你的工作方式。使你自己成为演示控制器的委托和重写presentationControllerDidDismiss(_:)
。
缺少一个一般的运行时生成的事件来通知你,所显示的视图控制器(无论是否为全屏)已被关闭,这确实很麻烦。但这不是一个新问题,因为始终存在非全屏显示的视图控制器。仅仅是现在(在iOS 13中),它们更多了!我在其他地方对此主题进行了单独的问答:统一UIViewController“成为最前端”检测?。
这还不够。如果呈现的VC中有一个nabber,并且有一个以编程方式关闭视图的自定义条形按钮,则不会调用presentation controller的关闭。
@Irina,您好-如果您以编程方式关闭视图,则不需要回调,因为您以编程方式关闭了视图-您知道是因为您这样做了。委托方法仅在用户执行的情况下使用。
@matt感谢您的回答。当以编程方式关闭视图时,不会调用该视图(如Irina所说),并且您说的很对,我们知道我们做到了。我只是认为不需要编写过多的样板代码即可在iOS13中使用新的模式表示样式来获得一种“ viewWillAppear”。当您通过提取了路由的体系结构来管理路由时(例如在MVVM +协调器中,或者在VIPER中为路由器类型),它会变得特别混乱
@AdamWaite我同意,但是这个问题并不新鲜。多年来,我们遇到了这个问题,包括弹出窗口,非全屏显示视图控制器,警报等。我认为这是苹果公司“事件”报道中的一个严重缺陷。我只是说现实是什么,为什么。我直接在这里解决问题:stackoverflow.com/questions/54602662/…
PresentationControllerDidDismiss(_ :)。在Child VC中单击“后退”按钮时未调用。有帮助吗?