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

mccptt67  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(95)

我试图在单击按钮和sendMessage函数后清除文本字段。我不断遇到错误,我无法解决它。有人有什么想法吗?我试图简单地在第一个结构体中创建一个布尔变量,并在sendMessages函数后切换它的值。这会导致self不可变的错误,我无法在CustomMessageField中访问此变量,我必须在那里执行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)
        }
    }
}
lvmkulzt

lvmkulzt1#

我认为您的输入缺少一个@State变量。一旦您有了它,您可以在发送后轻松地将其设置为“”:

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")
            }
        }
    }
}

相关问题