将数据从SwiftUI视图传递给UIViewController

5

我一直在测试 SwiftUI,看看它能走多远。现在,我想找出是否可以从 SwiftUI 的 View 直接传递字符串到 UIViewController。我想用 UILabel 显示这个字符串。我的故事版上只有 UILabel

以下是我的视图控制器 (UIViewController)。

import UIKit
import SwiftUI

class HomeViewController: UIViewController {
    var message = String()

    @IBOutlet weak var messageLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        messageLabel.text = message
    }
}

struct HomeViewControllerRepresentation: UIViewControllerRepresentable {
    func makeUIViewController(context: UIViewControllerRepresentableContext<HomeViewControllerRepresentation>) -> HomeViewController {
        UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "homeViewController") as! HomeViewController
    }

    func updateUIViewController(_ uiViewController: HomeViewController, context: UIViewControllerRepresentableContext<HomeViewControllerRepresentation>) {

    }
}

我的 SwiftUI View 如下所示。

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: HomeViewControllerRepresentation(message: "GGG")) { // Error
                    Text("Tap me")
                }
            }
            .navigationBarTitle("")
            .navigationBarHidden(true)
        }
    }
}

我希望只需传递HomeViewControllerRepresentation字符串即可,但不起作用。有没有一种简单的方法从SwiftUI视图传递数据到UIViewController?谢谢。

1个回答

6

UIViewControllerRepresentable 不是一个代理,而是包装器,因此一切都应该手动传输,就像这样:

struct HomeViewControllerRepresentation: UIViewControllerRepresentable {
    var message: String

    func makeUIViewController(context: UIViewControllerRepresentableContext<HomeViewControllerRepresentation>) -> HomeViewController {
        let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "homeViewController") as! HomeViewController
        controller.message = self.message
        return controller
    }

    func updateUIViewController(_ uiViewController: HomeViewController, context: UIViewControllerRepresentableContext<HomeViewControllerRepresentation>) {

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接