Я пытаюсь реализовать 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
Просто установите свойство 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