簡體   English   中英

如何修復 SwiftUI 中禁用的文本編輯器聚焦錯誤

[英]How can I fix disabled text editor focusing bug in SwiftUI

我認為當我進出另一個選項卡時,禁用的文本編輯器會集中在一個錯誤上。 我想完全禁用文本編輯器,但我不知道怎么做。 眼見為實。

struct TabViewWithTextEditor: View {
    var body: some View {
        TabView {
            TextEditors()
                .tabItem {
                    Image(systemName: "text.bubble")
                    Text("Text Editor")
                }
            
            AnotherView()
                .tabItem {
                    Image(systemName: "shippingbox")
                    Text("Empty View")
                }
        }
    }
}

struct TextEditors: View {
    @State var textA: String = "Hello World"
    @State var textB: String = "Placeholder"
    @State var enabled: Bool = true
    
    init() {
        UITextView.appearance().backgroundColor = .clear    // To apply background color.
    }
    
    var body: some View {
        VStack {
            Text("Text Editor")
            TextEditor(text: $textA)
                .background(enabled ? .gray : .red)
                .foregroundColor(.black)
                .disabled(!enabled)
            TextEditor(text: $textB)
                .background(enabled ? .yellow : .red)
                .foregroundColor(.black)
                .disabled(!enabled)
            Toggle("Enable Text Editors", isOn: $enabled)
        }
        .padding(30)
    }
}

struct AnotherView: View {
    var body: some View {
        Text("Empty View")
    }
}

它看起來像

演示錯誤

看起來問題是由於TextEditor (或后端的UITextView )保留了焦點,可能是由於錯誤。

這是安全的解決方法 - 在禁用之前強行移除焦點

使用 Xcode 13.4 / iOS 15.5 測試

@FocusState private var focused: Bool

var isEditing: Binding<Bool> {
    Binding(get: { enabled } , set: {
        if !$0 {
            focused = false      // << here !!
        }
        enabled = $0
    })
}

// ...

Toggle("Enable Text Editors", isOn: isEditing)

暫無
暫無

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

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