gpt4 book ai didi

swift - 如何从 SwiftUI View 导航到 UIKit UIViewController

转载 作者:行者123 更新时间:2023-12-03 16:36:57 25 4
gpt4 key购买 nike

到目前为止,我有一个完全使用 UIKit 构建的应用程序。但是,我希望能够开始实现一些 SwiftUI View 来替换一些 UIViewController。

我已经能够通过点击按钮从 UIViewController 导航到 SwiftUI View :

    @IBAction func buttonTapped(_ sender: Any) {
let newView = UIHostingController(rootView: SwiftUIView(viewObj: self.view, sb: self.storyboard, dismiss: self.dismiss) )
view.window?.rootViewController = newView
view.window?.makeKeyAndVisible()
}

我的问题是,如何从单个 SwiftUI View 过渡到 UIViewController?(因为应用程序的其余部分都在 UIKit 中)?我在 SwiftUI View 中有一个按钮,可以在点击时导航回 UIViewController。我试过了:
  • 路过viewstoryboard对象到 SwiftUI View ,然后调用执行类似于上述代码的操作来更改当前 View Controller 。但是,在模拟器上尝试时没有任何 react 。
  • 使用 .present以模态方式显示 SwiftUI View 。这有效,我可以允许 SwiftUI View .dismiss本身。但是,这只适用于模态,我希望使其正常工作(即更改屏幕)

  • 这是我的简单 SwiftUI View :
    struct SwiftUIView: View {
    var viewObj:UIView? // Perhaps use this for transition back?
    var sb:UIStoryboard?
    var dismiss: (() -> Void)?

    var body: some View {

    Button(action: {
    // Do something here to Transition
    }) {
    Text("This is a SwiftUI view.")
    }
    }
    }

    我无法理解如何将 SwiftUI 正确集成到 UIKit 不是 反过来,我不确定 UIViewControllerRepresentable是这个问题的答案。非常感谢对此的任何解决方案、替代方案或有用的知识。再次感谢!

    最佳答案

    再见,

    我试图通过使用闭包回调来遵循您的方法。

    struct SwiftUIView: View {
    var dismiss: (() -> Void)?
    var present: (()->Void)?

    var body: some View {
    VStack(spacing: 20) {
    Button(action: {
    self.dismiss?()
    }) {
    Text("Dismiss me")
    }
    Button(action: {
    self.present?()
    }) {
    Text("Present some UIViewController")
    }
    }
    }
    }

    当你展示你的 UIHostingController 时,你想要实现 2 个闭包回调:
    @IBAction func buttonTapped(_ sender: Any) {
    let hostingController = UIHostingController(rootView: SwiftUIView())
    hostingController.rootView.dismiss = {
    hostingController.dismiss(animated: true, completion: nil)
    }
    hostingController.rootView.present = {
    let destination = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "VC_TO_PRESENT")
    hostingController.present(destination, animated: true, completion: nil)
    }

    present(hostingController, animated: true, completion: nil)
    }

    关于swift - 如何从 SwiftUI View 导航到 UIKit UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60306609/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com