SwiftUI 清除文本字段 FirstResponder
Posted
技术标签:
【中文标题】SwiftUI 清除文本字段 FirstResponder【英文标题】:SwiftUI Clear Textfield FirstResponder 【发布时间】:2021-04-25 21:46:30 【问题描述】:我希望使用一个独立的按钮来清除我的 FirstResponder TextField,该按钮将保存字段数据并清除输入内容,以便我们可以再次编写。我的代码基于以下工作:
马泰奥·帕西尼 -> https://***.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
【问题讨论】:
【参考方案1】:只需替换
func set()
self.Clear=true
与
func set()
self.text = ""
这会立即清除文本。
【讨论】:
它是如此简单...非常感谢您的帮助,但使用此解决方案我在 xcode 中存在非阻塞冲突“在视图更新期间修改状态,这将导致未定义的行为。”你认为这对下一步有什么影响吗? @MaxLand 是的,你应该避免这种情况。我没有收到您发布的代码的错误,也许它在其他地方?你能显示得到错误的代码行吗? 当我点击按钮时出现问题,根据您指示的修改,文本字段被很好地删除,但在代码行级别: text = textField.text ? “”,错误:“在视图更新期间修改状态,这将导致未定义的行为。”出现。错误发生在线程 1 上。 @MaxLand 哦,干掉整个textFieldDidChangeSelection method
@MaxLand 你也可以删除所有对clear
的引用以上是关于SwiftUI 清除文本字段 FirstResponder的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI Textfield - 如何在编辑模式下设置文本字段的背景颜色以清除