【发布时间】:2021-01-11 19:26:38
【问题描述】:
该应用仍然大量使用 ViewControllers 和 TableViewControllers,这使得集成 SwiftUI 变得困难。
首先,我从 ViewController 呈现 swiftUI 视图。
class SwiftUIViewController : UIViewController {
let contentView = UIHostingController(rootView: SwiftUIView())
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(contentView.view)
}
}
现在,在我的 SwiftUIView 中,我需要启动 ViewControllers 和 TableViewControllers。 我创建了一个可与 .sheet 一起使用的注入器类,以从 SwiftUI 中呈现视图控制器。
struct ViewControllerInjector : UIViewControllerRepresentable {
let viewController: UIViewController
func makeUIViewController(context: Context) -> UIViewController {
return viewController
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
}
现在这种工作,唯一的问题是我似乎无法找到一种方法来呈现 ViewController 而不是 .sheet
struct SwiftUIView : View {
@State private var showingVC1 = false
...
.sheet(isPresented: $showingVC1) {
ViewControllerInjector(viewController: ViewController1())
}
...
}
我想完全离开 swift ui 屏幕并继续使用视图控制器,直到我按下后退按钮并返回 SwiftUI 屏幕。此外,即使我创建了第二个专用于 TableView 的注入器类,注入器似乎也无法与 TableViewControllers 一起使用。
这种导航方式可行吗?如果有任何不清楚的地方,请随时发表评论。谢谢
【问题讨论】:
-
可能不会有太大帮助,但感觉就像您希望简化。差不多 18 个月前(哇!)我购买了 SwiftUI 并且需要一些东西 - 一个 UINavigationView 和两个 UITableViews 之间导航。 SwiftUI 是 so 原始的,当我需要在导航中为第一个 UITableView 添加一个编辑按钮时,我求助于“可表示”。直到我发现我需要一个图像选择器、一个共享表和一个幻灯片后,我才干脆放弃了。 UIKit 在十年内不会去任何地方,也许是两年。我的建议,不要尝试太多。坚持为应用使用正确的 base。
-
仅供参考,我所做的工作是将整个 UIKit 部分 - 一个导航控制器、两个表视图、第一个可编辑 - 作为 UIViewControllerRepresentable。直到那之后我才放弃了 SwiftUI。 (目前。)我认为这是我认为也许我可以像您所说的那样的部分 - 将 UIKit 嵌入到 SwiftUI 中,反之亦然,而不是使用您正在嵌入的组件,嵌入另一个。老实说,我建议您将事情简化。请记住,有一天您或其他人将不得不获取此代码进行维护。
标签: ios swift swiftui navigation