SwiftUI View не обновляет свое состояние при внедрении в UIView (используя UIHostingController) - PullRequest
3 голосов
/ 05 марта 2020

Я хочу использовать SwiftUI View в качестве контента для дочернего UIView (который в моем приложении будет внутри UIViewController), передав SwiftUI. Однако SwiftUI View не реагирует на изменения состояния после встраивания в UIView.

Я создал упрощенную версию своего кода ниже, в которой есть проблема. При нажатии на текстовое представление, встроенное в EmbedSwiftUIView, внешнее текстовое представление в верхней части VStack обновляется должным образом, но текстовое представление, встроенное в EmbedSwiftUIView, не обновляет свое состояние.

struct ProblemView: View {

    @State var count = 0

    var body: some View {
        VStack {
            Text("Count is: \(self.count)")
            EmbedSwiftUIView {
                Text("Tap to increase count: \(self.count)")
                    .onTapGesture {
                        self.count = self.count + 1
                }
            }
        }
    }
}

struct EmbedSwiftUIView<Content:View> : UIViewRepresentable {

    var content: () -> Content

    func makeUIView(context: UIViewRepresentableContext<EmbedSwiftUIView<Content>>) -> UIView {
        let host = UIHostingController(rootView: content())
        return host.view
    }

    func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<EmbedSwiftUIView<Content>>) {

    }
}
...