我试图在单击按钮和 sendMessage 函数后清除文本字段。我总是遇到错误,但我无法弄清楚。
我尝试简单地在第一个结构中创建一个 Bool 变量,并在 sendMesssages 函数之后切换它的值。这会导致 self is immutable 的错误,我无法在 CustomMessageField 中访问此 var,我必须执行
TextField.text = ""
才能清除它。
struct MessagesField: View {
var body: some View {
HStack{
CustomMessageField(placeholder: Text("Enter Your Message Here"), text: $message)
Button {
viewModel.sendMessages(withOtherUserUid: viewModeler.user.id ?? "", withText: message)
} label: {
Image(systemName: "paperplane.fill")
}
}
}
}
struct CustomMessageField: View{
var placeholder: Text
@Binding var text: String
var editingChanged: (Bool) -> () = {_ in}
var commit: () -> () = {}
var body: some View{
ZStack(alignment: .leading){
if text.isEmpty{
placeholder
.opacity(0.5)
}
TextField("", text: $text, onEditingChanged: editingChanged, onCommit: commit)
}
}
}
我认为您缺少输入的@State var。完成后,您可以在发送后轻松将其设置为“”:
struct MessagesField: View {
@State private var message: String = "" // declare here
var body: some View {
HStack{
CustomMessageField(placeholder: Text("Enter Your Message Here"), text: $message)
Button {
viewModel.sendMessages(withOtherUserUid: viewModeler.user.id ?? "", withText: message)
message = "" / reset here after send
} label: {
Image(systemName: "paperplane.fill")
}
}
}
}