9

我想知道是否有任何方法可以在遗留项目中开始使用SwiftUI,并且仍然能够在SwiftUI场景中来回导航。也就是说,假设我只想为我去年一直在从事的项目支持最后一个iOS 13 。一切都建立在UIKit之上,导航以通常的方式呈现或推送视图控制器。

现在我想开始使用 SwiftUI,所以我在项目的 General 中启用了该选项,目标为iOS 13 ,在Info.plist 中获取我的SceneDelegate和我的新键值对。为了导航到Swift UI场景,我可以推送一个UIHostingViewController,它的 rootView 将是我新设计的SwiftUI视图。但是如何使用NavigationLink推送旧的UIKit视图控制器?

class ViewController: UIViewController {

    @IBAction func userDidTapGo(_ sender: Any) {
        let contentView = ContentView()
        navigationController?.pushViewController(UIHostingController(rootView: contentView), animated: true)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "UIKit"
    }
}

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: /* what should be here?? */) {
                Text("Go to UIKit")
            }

        }.navigationBarTitle("Swift UI")
    }
}
4

1 回答 1

0

您需要将旧视图控制器包装在UIViewControllerRepresentable包装器中。Apple 有一个很好的教程:与 UIKit 交互

它工作得很好,可以让您重用旧代码,而不是从头开始重写所有内容。

于 2019-09-18T13:56:26.487 回答