UITextView的SwiftUI包装器未更新ObservedObject

问题描述 投票:0回答:1

我希望我错了,但是我无法找到等效于可编辑的SwiftUIUITextView。因此,我使用UIViewRepresentable构建了一个。同时填充SwiftUI文本和我自己的带有ObservableObject的视图都可以工作-但在我的视图中进行的更新是不会传播到ObservableObject。我一定错过了重要的东西约束力的概念。任何指导将不胜感激。

import SwiftUI
import Combine

struct ContentView: View {

    @ObservedObject var myOText: MyOText

    var body: some View {
        ScrollView {
            VStack {
                Text("This is a bound Text View")
                    .padding(.top, 10)
                    .font(.headline)

                Text(myOText.inTheCourse)
                    .lineLimit(3)
                    .padding()

                Text("This is a multi-line UITextView wrapper:")
                    .font(.headline)

                MultilineTextView(myOText: myOText)
                    .frame(height: 100)
                    .padding()

                Spacer()
            }
        }
    }
}

struct MultilineTextView: UIViewRepresentable {

    @ObservedObject var myOText: MyOText

    func makeUIView(context: Context) -> UITextView {
        let view = UITextView()
        view.isScrollEnabled = true
        view.isEditable = true
        view.isUserInteractionEnabled = true
        view.textAlignment = .center
        view.font = UIFont(name: "Times New Roman", size: 20)
        return view
    }

    func updateUIView(_ uiView: UITextView, context: Context) {
        uiView.text = myOText.inTheCourse
    }
}

class MyOText: ObservableObject {
    @Published var inTheCourse: String = "When in the Course of human events, it becomes necessary for one people to dissolve the political bands which have connected them ..."
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView(myOText: MyOText())
    }
}

enter image description hereXcode版本11.2 Beta 2(11B44),iOS 13。

xcode swiftui combine
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.