【发布时间】:2021-06-10 19:34:57
【问题描述】:
我有一个 UIHostingController,它托管一个名为 CatalogView 的 SwiftUI 视图。 显示它时,附加了一个环境对象,所以基本上从 UIKit 显示它是这样的:
let rootCatalogView = CatalogView()
let appState = AppState.get()
let catalogView = UIHostingController(rootView: rootCatalogView.environmentObject(appState))
navigationController.pushViewController(catalogView, animated: true)
现在稍后我需要检查此 UIHostingController 是否在 navigationController.viewControllers 列表中
type(of:) 显示如下,哪种有意义:
UIHostingController<ModifiedContent<CatalogView, _EnvironmentKeyWritingModifier<Optional<AppState>>>>
像 vc.self 是 UIHostingController.Type 或 vc.self 是 UIHostingController.Type 都返回 false (vc 是 navigationController.viewControllers 的一个元素
以下显然有效,它返回 true,但 UIHostingController 初始化的任何更改都会改变其类型
vc.isKind(of: UIHostingController<ModifiedContent<CatalogView, _EnvironmentKeyWritingModifier<Optional<StoreManager>>>>.self)
如何检查视图控制器是否属于 UIHostingController 类型? 或者至少我怎样才能将控制器转换为 UIHostingController 以便我可以检查它的 rootview?
【问题讨论】:
-
试试
if vc is UIHostingController -
UIHostingController 是一个带有泛型参数的类,所以不起作用。
-
xcode 给出以下错误:无法推断通用参数“内容”强制转换为“UIHostingController”
-
你能把
catalogView设为一个属性,然后检查if navigationController.viewControllers.contains(catalogView) { ... }之类的东西吗? (在浏览器中输入,未在 Xcode 中测试)。
标签: ios swift generics swiftui uihostingcontroller