Как очистить текстовое поле с помощью кнопки (Swift UI)

Я пытаюсь реализовать Mailview, как я видел раньше в учебнике. Решив макет, я попытался добавить в него некоторые особенности.

Если я начинаю писать новое сообщение, я хочу очистить заполненные поля текстового поля, когда пользователь щелкает корзину для мусора. Но, однако, я не знаю, как это очистить.

import SwiftUI

var inboundMails  = [[String()]]
var outboundMails  = [[String()]]


struct ContentView: View {
    
    @State var showComposeMessageView: Bool = false
    
    var body: some View {
        
        TabView
        {
            NavigationView
            {
                List (0 ..< 6)
                {
                    _ in
                    NavigationLink(destination: Text("Nachrichtentext"))
                    {
                        SingleMessageView()
                    }
                }
                .listStyle(GroupedListStyle())
                .navigationTitle("Inbox")
                .navigationBarItems(trailing:
                                        Button(action: { showComposeMessageView.toggle() }, label: {
                                            Image(systemName: "square.and.pencil")
                                        })
                )
            }
            // Verfassen Button
            .sheet(isPresented: $showComposeMessageView, content:
                    {
                        NewMessage()
                    }) //.sheet
            .tabItem {
                Image(systemName: "envelope.fill")
                Text("Inbox")
            }
            Text("Sent")
                .tabItem {
                    Text("Sent")
                    Image(systemName: "paperplane.fill")
                }
        }
    }
    
}

// Design eines einzelnen Nachrichtenblocks
struct SingleMessageView: View {
    var body: some View {
        
        HStack
        {
            Image(systemName: "person.circle.fill")
                .resizable()
                .frame(width: 40, height: 40, alignment: .center)
                .foregroundColor(.gray)
            
            VStack(alignment: .leading)
            {
                HStack
                {
                    Text("Absender")
                        .font(.headline)
                    Spacer()
                    Text("01-07-2020")
                        .font(.subheadline.monospacedDigit())
                        .foregroundColor(.secondary)
                }
                
            Text("Betreff")
                .font(.subheadline)
                .lineLimit(2)
            }
        }
    }
}

//Neue Nachricht verfassen
struct NewMessage: View {
    @State var messageText = ""
    @State var betreff = ""
    @State var cc = ""
    @State var empfaenger = ""
    @State var sendButton: Bool = false
    
    var body: some View {
        ZStack
        {
            Color.white
            Spacer()
            VStack(alignment: .leading)
            {
                // Kopfzeile
                HStack(alignment: .top)
                {
                    Spacer()
                    Image(systemName: "paperplane.circle")
                        .resizable()
                        .frame(width: 70, height: 70, alignment: .leading)
                   
                    VStack(alignment: .leading)
                    {
                        Text("Empfänger: ")
                        Spacer()
                        Text("Betreff: ")
                        Spacer()
                        Text("CC:")
                    }.frame(height: 70)
                    VStack
                    {
                        TextField("Empfänger", text: $empfaenger).lineLimit(2)
                            .font(.subheadline)
                        Spacer()
                        TextField("Betreff", text: $betreff).lineLimit(2)
                            .font(.subheadline)
                        Spacer()
                        TextField("CC", text: $cc)
                            .font(.subheadline)
                    }.frame(height: 70)
                }
                    .foregroundColor(.black)
                    .background(Color.white)
                    .font(.headline)
                // Knöpfe
                HStack
                {
                    Spacer()
                    
                    // Senden
                    Button(
                        action: { sendButton.toggle()
                            outboundMails =  Mails().MailManager(inbound: false, from_to: empfaenger, cc: cc, subject: betreff, message: messageText, mailarray: outboundMails)},
                        label: {Image(systemName: "paperplane")})
                            .frame(width: 20, height: 20, alignment: .leading)
                    Spacer()
                    // Farbe bearbeiten
                    Button(
                        action: { sendButton.toggle() },
                        label: {Image(systemName: "pencil")})
                            .frame(width: 20, height: 20, alignment: .leading)
                    Spacer()
                    
                    // Anlage hinzufügen
                    Button(
                        action: { sendButton.toggle() },
                        label: {Image(systemName: "doc")})
                            .frame(width: 20, height: 20, alignment: .leading)
                    Spacer()
                    
                    // Verwerfen
                    Button(
                        action: { sendButton.toggle()
                            messageText = ""
                            cc = ""
                            betreff = ""
                            empfaenger = ""
                        },
                        label: {Image(systemName: "trash")})
                            .frame(width: 20, height: 20, alignment: .leading)
                    Spacer()
                }.frame(height: 30, alignment: .top)
                
                // NachichtentextFeld
                TextEditor(text: $messageText)
                    .frame(width: 411, height: 400, alignment: .top)
                    .border(Color.gray)
                Spacer()
            }
        }
    }
}

// Design eines einzelnen Nachrichtenblocks
struct SendMessageView: View {
    var body: some View {
        HStack
        {
            Image(systemName: "person.circle.fill")
                .resizable()
                .frame(width: 40, height: 40, alignment: .center)
                .foregroundColor(.gray)
            
            VStack(alignment: .leading)
            {
                HStack
                {
                    Text("Absender")
                        .font(.headline)
                    Spacer()
                    Text("01-07-2020")
                        .font(.subheadline.monospacedDigit())
                        .foregroundColor(.secondary)
                }
                
            Text("Betreff")
                .font(.subheadline)
                .lineLimit(2)
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
} ```


Thanks in advance for your help!

привет, интересно, возможно, это может вас заинтересовать stackoverflow.com/questions/320078/   —  person Benhuen    schedule 06.07.2021

См. также:  Сборка XCFramework с зависимостью от модуля

Просто установите свойство text для этого текстового поля как пустую строку.   —  person Benhuen    schedule 06.07.2021

Код делает это. На самом деле, он выглядит нормально и работает для меня в предварительном просмотре SwiftUI.   —  person Benhuen    schedule 06.07.2021

@Seaspell Можете ли вы объяснить это немного подробнее? Я знаю, что в этом поле установлено нулевое значение или пустая строка. Я могу изменить только сохраненные переменные, но он не очищает поля Tex при просмотре   —  person Benhuen    schedule 07.07.2021

@Eric Shieh из Я нажимаю кнопку корзины, все поля должны быть Clearstream. В моем моделировании этого не происходит: /   —  person Benhuen    schedule 07.07.2021

@jspcal Мне нужна кнопка x в каждом поле. Я хочу разорвать каждое поле с помощью только одной кнопки   —  person Benhuen    schedule 07.07.2021

@Benhuen Я скопировал ваш код, закомментировал одну строку (outboundMails = …) и запустил ее в Live Preview. Создал новую почту, заполнил все поля, а потом нажал корзину. Все поля очищены. Я использую Xcode 12.5 в проекте развертывания iOS 14.5.   —  person Benhuen    schedule 07.07.2021

@Eric Shieh, ладно, это подозрительно. Я проверю это позже еще раз. Заранее спасибо!   —  person Benhuen    schedule 07.07.2021

@Eric Shieh Кстати, у вас тоже была проблема, что первое поле выходит за пределы окна, когда вы открываете клавиатуру?   —  person Benhuen    schedule 07.07.2021

@Eric Shieh Спасибо, братан, все сработало! Идк, почему я не получил его раньше.   —  person Benhuen    schedule 08.07.2021

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: