由于UINavigationController
和NavigationView
极其有限和/或有故障,因此我在SwiftUI应用程序的内部使用了NavigationLink
。我有一个名为pushView(..)
的函数,该函数需要进入SwiftUI视图,将其包装在UIHostingController
中,然后将其推入导航堆栈的顶部:
func pushView(view: AnyView, animated: Bool = true) {
let hostingView = UIHostingController(rootView: view)
navigationController.pushViewController(hostingView, animated: animated)
}
现在,我的大部分通话看起来都像...pushView(AnyView(MyView())
,我不得不将每个视图都投射到AnyView
,这有点烦人和不干净。
是否有更好的方法可以做到这一点,所以我不必每次都进行投射?
答案 0 :(得分:2)
通常,如果要将视图收集到某个数组中,则需要使用parameters = 'name text, id integer'
来键入视图(对于SwiftUI,这是很少见的,除非您知道自己在做什么,否则可能不是这样) ),但是由于您要做的只是推送AnyView
的实例(UIViewControllers
继承的实例),因此您应该能够使用通用函数:
UIHostingController
func pushView<V: View>(view: V, animated: Bool = true) {
let hostingView = UIHostingController(rootView: view)
navigationController.pushViewController(hostingView, animated: animated)
}