我有一个 SwiftUI 视图,UIHostingController
并像formSheet
在 iPad 上那样以模态方式呈现。我有一个完成按钮可以关闭,并且有一个从父视图控制器传递的回调闭包,以便在按下此完成按钮时执行操作。该问题发生在 iPad 上,用户可能会在视图之外点击,视图会被关闭,从而错过回调。
解决此问题的一种方法是触发onDismiss
SwiftUI 视图中的回调闭包。虽然它有效,但我不确定它是否是正确的地方以及是否足够可靠。文档只说onDismiss
当“视图从屏幕上消失”时调用。但是,如果我们将一个视图推到导航层次结构中该视图的顶部,onDismiss
仍然会被调用怎么办?
根据您的描述,我假设您有一个如下所示的 SwiftUI 视图:
当呈现托管控制器时,您可以设置其
presentationController
委托并实现委托方法presentationControllerDidDismiss
。例如:presentationControllerDidDismiss
将在工作表完全关闭时调用,而不是在用户“开始”关闭它时调用(可以使用 检测presentationControllerWillDismiss
),因为此时用户可以改变主意并停止关闭。正如其文档所述,
presentationControllerDidDismiss
以编程方式关闭工作表时不会调用,因此您仍然需要将回调传递给 SwiftUI 视图。另请注意,您可以设置:
强制用户使用完成按钮关闭工作表。