如何检测模态视图在 SwiftUI 中全局可见
Posted
技术标签:
【中文标题】如何检测模态视图在 SwiftUI 中全局可见【英文标题】:How to detect a modal view is visible globally in SwiftUI 【发布时间】:2021-07-30 21:27:36 【问题描述】:在 SwiftUI 中,有几种方法可以呈现模态视图,例如 .popover
。
我的背景是我想在其他地方而不是在当前视图页面下展示 UIKit 模式视图
private func presentGlobally(animated: Bool, completion: (() -> Void)?)
var rootViewController = UIApplication.shared.rootViewController
while true
if let presented = rootViewController?.presentedViewController
rootViewController = presented
else if let navigationController = rootViewController as? UINavigationController
rootViewController = navigationController.visibleViewController
else if let tabBarController = rootViewController as? UITabBarController
rootViewController = tabBarController.selectedViewController
else
break
UIApplication.shared.rootViewController?.present(self, animated: animated, completion: completion)
上述方法不起作用,因为 SwiftUI 给出了错误
``[演示]尝试本 所以我在想
【问题讨论】:
【参考方案1】:在您的算法中,您正在计算 rootViewController
,但随后将 self
呈现给 UIApplication.shared.rootViewController
,而不是找到的 rootViewController
替换
UIApplication.shared.rootViewController?.present(self, animated: animated, completion: completion)
有
rootViewController?.present(self, animated: animated, completion: completion)
【讨论】:
以上是关于如何检测模态视图在 SwiftUI 中全局可见的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 检测视图何时不可见(有点视图会消失)并停止发布者
如何使用 SwiftUI 在模态视图中创建 NSManagedObject?