自动更正时 SwiftUI 文本字段未清除

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

在文本字段“添加任天堂开关”中输入以下内容。 “nintendo”应自动更正为“Nintendo”,然后按“发送”按钮。

通过按钮操作关闭完成此操作时,文本字段绑定状态变量将清除,但不会在 UI 中呈现为清除状态

但是,如果通过 onSubmit 视图修饰符闭包完成此操作,文本字段将被清除

我是否缺少某些东西才能使其正常工作?

import SwiftUI

struct ContentView: View {
    @State var text: String = ""
    
    private func clearText() {
        print("YAHOOOO 2clear \(self.text)")
        self.text = ""
        print("YAHOOOO 2\(self.text)")
    }
    
    var body: some View {
        VStack {
            TextField("Message", text: $text, axis: .vertical)
                .autocorrectionDisabled(false)
                .onSubmit {
                    clearText()
                }
            
            Button(action: {
                DispatchQueue.main.async {
                    clearText()
                }
            }, label: {
                Text("Send")
            })

        }
        .padding()
    }
}

包装在dispatchQueue.main.async调用中 使用 onSubmit 视图修改器

UI 应更新并将文本字段呈现为空

swiftui textfield
1个回答
0
投票

我找到的解决方案是强制更新

TextField
。而且您不需要
DispatchQueue.main.async
onSubmit

import SwiftUI

struct ContentView: View {
    @State var updater = false
    @State var text: String = ""
    
    private func clearText() {
        self.text = ""
        updater.toggle()
    }
    
    var body: some View {
        VStack {
            TextField("Message", text: $text, axis: .vertical)
                .autocorrectionDisabled(false)
                .id(updater)
            
            Button {
                clearText()
            } label: {
                Text("Send")
            }
        }
        .padding()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.