簡體   English   中英

問:Form 和 TextField [SwiftUI] 上的錯誤

[英]Q: Bug on Form and TextField [SwiftUI]

當我在Form使用TextField時,在點擊該字段之前不會顯示正確的值。

名稱字段最初顯示為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 上測試

要“使其工作”,請將.onAppear {...}移動到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 {   // <--- here
                        name = user.name
                        email = user.email
                    }
            }
            .navigationTitle("Edit user")
            .toolbar {
                Button("Save") {
                    user.name = name
                    user.email = email
                }
            }
        }.navigationViewStyle(.stack)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM