繁体   English   中英

SwiftUI 清除文本字段 FirstResponder

[英]SwiftUI Clear Textfield FirstResponder

我希望使用一个独立的按钮清除我的 FirstResponder TextField,该按钮将保存字段数据并清除输入内容,以便我们可以再次编写。 我的代码基于以下工作:

马泰奥·帕西尼-> https://stackoverflow.com/a/56508132/15763454

Clear 变量应该在它变为 True 时清除该字段,当我单击按钮时它会起作用,但我必须另外在文本字段中输入一个字符才能清除它。 这是合乎逻辑的,因为“textFieldDidChangeSelection”function 仅在文本字段更改时运行

我如何确保一旦我的 Clear 变量更改为 True,文本字段就会自动删除?

struct ContentView : View {
    
    @State var text: String = ""
    @State var Clear = false
    
    var body: some View {
        
        HStack{
            
            Spacer()
            
            Button(action: set,label: {
                Text("Clic")
            })
            
            
            Spacer()
            CustomTextField(text: $text,clear: $Clear,isFirstResponder: true)
                .frame(width: 300, height: 50)
                .background(Color.red)
        }
        
    }
    
    func set(){
        self.Clear=true
    }
    
}

struct CustomTextField: UIViewRepresentable {
    
    
    class Coordinator: NSObject, UITextFieldDelegate {
        
        @Binding var text: String
        @Binding var clear: Bool
        var didBecomeFirstResponder = false
        
        init(text: Binding<String>,clear: Binding<Bool>) {
            _text = text
            _clear = clear
            
        }
        
        func textFieldDidChangeSelection(_ textField: UITextField) {
            text = textField.text ?? ""
            if clear == true{
                textField.text?.removeAll()
                clear = false
            }
        }
        
    }
    
    
    @Binding var text: String
    @Binding var clear: Bool
    var isFirstResponder = false
    
    func makeUIView(context: UIViewRepresentableContext<CustomTextField>) -> UITextField {
        let textField = UITextField(frame: .zero)
        textField.delegate = context.coordinator
        return textField
    }
    
    func makeCoordinator() -> CustomTextField.Coordinator {
        return Coordinator(text: $text,clear: $clear)
    }
    
    func updateUIView(_ uiView: UITextField, context: UIViewRepresentableContext<CustomTextField>) {
        uiView.text = text
        if isFirstResponder && !context.coordinator.didBecomeFirstResponder  {
            uiView.becomeFirstResponder()
            context.coordinator.didBecomeFirstResponder = true
        }
    }
}

只需更换

func set() {
    self.Clear=true
}

func set() {
    self.text = ""
}

这会立即清除文本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM