swift - SwiftUI 清除文本字段 FirstResponder
问题描述
我希望使用一个独立的按钮清除我的 FirstResponder TextField,该按钮将保存字段数据并清除输入内容,以便我们可以再次编写。我的代码基于以下工作:
马泰奥·帕西尼-> https://stackoverflow.com/a/56508132/15763454
Clear 变量应该在它变为 True 时清除该字段,当我单击按钮时它会起作用,但我必须另外在文本字段中输入一个字符才能清除它。这是合乎逻辑的,因为“textFieldDidChangeSelection”函数仅在文本字段更改时运行
我如何确保一旦我的 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 = ""
}
这会立即清除文本。
推荐阅读
- html - 使用 img src 的外部图像不允许整数参数
- sql-server - 让用户选择他想要多少天的数据
- fortran - 传递时字符串数组被无效
- keras - Keras-RL 集在拟合模型后返回相同的值
- c++ - 用于预填充运行时使用的对象的 ELF INIT 部分代码
- excel-formula - Excel 2007 INDEX/MATCH 在多个 IF 上使用 MIN
- android - 检查适用于 Android 的 Mobile Edge
- android - 如何在android中取消特定警报
- php - 如何从 db 获取上周和上个月的注册用户
- java - 推送通知前台和后台