簡體   English   中英

iOS 14 SwiftUI UIViewRepresentable updateUIView 沒有檢測到 ObservedObject 的變化?

[英]iOS 14 SwiftUI UIViewRepresentable updateUIView doesn't detect ObservedObject changing?

我有 UIViewRepresentable 實現的 UITextView。

struct CustomTextView: UIViewRepresentable {
    var tmpTextVM: TmpTextViewModel
    
    func makeUIView(context: UIViewRepresentableContext<CustomTextView>) -> UITextView {
        let textView = UITextView()
        textView.backgroundColor = UIColor.clear
        textView.isScrollEnabled = false
        textView.text = "aaaaaaaaaaaaaaaaaa"
        textView.font = UIFont(name: "ArialMT", size: 20)
        return textView
    }

    func updateUIView(_ uiView: UITextView, context: Context) {
        uiView.textColor = tmpTextVM.color
        
    }}

我想像這樣使用它。

struct ContentView: View {
    
    @ObservedObject var tmpTextVM: TmpTextViewModel
   
        var body: some View {

            VStack {
                
                Button(action: {
                    tmpTextVM.changeColor(UIColor.red)
                }){
                    Image(systemName:"eyedropper.full")
                }
                
                CustomTextView(tmpTextVM: tmpTextVM)
                    .foregroundColor(Color(tmpTextVM.color))
                    .frame(width:300, height: 300, alignment: .topLeading)
                    .border(Color.red, width: 1)
                    
            }
    }
}

在 iOS 13 上,如果我點擊按鈕,則會調用 updateUIView 並更改該文本顏色,但在 iOS 14 上不會調用 updateUIView。 有沒有辦法通過更改 iOS 14 上的 ObservedObject 來調用視圖更新?

這里是 TmpTextViewModel 及其 model 的代碼。

    class TmpTextViewModel: ObservableObject {
    
    @Published private var tmpTextModel: TmpTextModel = TmpTextModel()
    
    var color: UIColor {tmpTextModel.color}
    
    func changeColor(_ color: UIColor) {
        tmpTextModel.color = color
    }
    
}
struct TmpTextModel {
    
   var color:UIColor = UIColor.purple
    
}

你需要讓ˋCustomTextViewˋ來監聽ˋTmpTextViewModelˋ的變化。

只需將ˋCustomTextViewˋ中的ˋtmpTextVMˋ聲明為ˋ@ObservedOjectˋ。

struct CustomTextView: UIViewRepresentable {
   @ObservedObject var tmpTextVM: TmpTextViewModel
   //....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM