#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, и это действительно сработало. Спасибо!