如何在消息发送后清除文本字段

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

我试图在单击按钮和 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)
        }
    }
}
xcode swiftui
1个回答
0
投票

我认为您缺少输入的@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")
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.