Вопрос: Ошибка в форме и текстовом поле [SwiftUI]

#ios #forms #swiftui #textfield

Вопрос:

Когда я использую TextField in Form , правильное значение не отображается до тех пор, пока не коснетесь поля.

Поле » Имя «сначала отображается dummy и изменяется на shuji «при нажатии».

Если я изменюсь Form на VStack , отобразится начальное значение.

Просмотр содержимого.swift

 import SwiftUI  struct User {  var name: String  var email: String }  struct ContentView: View {  @Binding var user: User  @State private var name: String = "dummy"  @State private var email: String = ""   var body: some View {  NavigationView {  Form {  TextField("Name", text: $name)  TextField("Email", text: $email)  }  .navigationTitle("Edit user")  .toolbar {  Button("Save") {  user.name = name  user.email = email  }  }  }  .onAppear {  name = user.name  email = user.email  }  } }  

FormTestApp.swift

 import SwiftUI  @main struct FormTestApp: App {  @State var user = User(name: "shuji", email: "shuji@abc.com")  var body: some Scene {  WindowGroup {  ContentView(user: $user)  }  } }  

Протестировано на iPhone 12 iOS 15.1 и симуляторе iOS 15.0

Комментарии:

1. Интересно, это работало в iOS 14.x ?

Ответ №1:

Чтобы «заставить это работать», переместите .onAppear {...} в сразу после a TextField , вот так:

 struct ContentView: View {  @Binding var user: User  @State private var name: String = "dummy"  @State private var email: String = ""    var body: some View {  NavigationView {  Form {  TextField("Name", text: $name)  TextField("Email", text: $email)  .onAppear { // lt;--- here  name = user.name  email = user.email  }  }  .navigationTitle("Edit user")  .toolbar {  Button("Save") {  user.name = name  user.email = email  }  }  }.navigationViewStyle(.stack)  } }  

Комментарии:

1. У меня была та же проблема в iOS 15, и это действительно сработало. Спасибо!