swiftui - 从 SwiftUI 打开 UIKit ViewController 的最佳方式是什么

标签 swiftui swiftui-navigationlink

我没有得到正确的解决方案,如何从单击的 SwiftUI 按钮打开 UIKit ViewController(带导航 Controller )。

最佳答案

您可以使用 UIViewControllerRepresentable 协议(protocol)来完成此操作,该协议(protocol)用于在 SwiftUI 中管理 UIKit ViewController

这里是从 SwiftUI View 界面显示 ViewController 的代码。

SwiftUI View

struct ContentView: View {

    @State var isOpenView = false

    var body: some View {
    
        NavigationView {

            VStack {

                //show your view controller
                NavigationLink(destination: TestControllerView(), isActive: $isOpenView) {
                    EmptyView()
                }
            
                Button(action: {
                    self.isOpenView = true
                }){
                    Text("Tap Me")
                }                    
            }
        }
    }
}

现在将您的 ViewController 包装到 UIViewControllerRepresentable

struct TestControllerView : UIViewControllerRepresentable {

     func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
    
     }

     func makeUIViewController(context: Context) -> some UIViewController {

        guard let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "TestViewController") as? TestViewController else {
            fatalError("ViewController not implemented in storyboard")
        }
    
        return viewController
     }
}

这是您的 ViewController.Swift 文件代码

import UIKit

class TestViewController: UIViewController {

     override func viewDidLoad() {
         super.viewDidLoad()
         // Do any additional setup after loading the view.
     }

     @IBAction func btnBackClicked(_ sender : UIButton) {
         self.dismiss(animated: true, completion: nil)
     }
}

关于swiftui - 从 SwiftUI 打开 UIKit ViewController 的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72614674/

相关文章:

ios - 如何在单击按钮时以编程方式切换选项卡?在 swiftui 中

ios - SwiftUI-HStack NavigationLink“按钮”分别向两个元素添加按钮样式?

swift - 根据条件,swiftUI 单击按钮时移动到 nextView

swift - SwiftUI 中的动画状态变化

SwiftUI 关闭从 NavigationView 呈现的模式表(Xcode Beta 5)

button - SwiftUI:如何从 View 模型更新按钮状态

ios - 如何在另一个 NavigationLink 中包含一个 NavigationLink

ios - 无法从 Cocoapods 渲染 SwiftUI 预览

swiftUI:检测嵌入在数组中的两个 View 的交集并交换它们的位置

swiftui - 如何从 slider 菜单启动 SwiftUI 中的新 View ,使其不会在 slider 本身内启动