问:Form 和 TextField [SwiftUI] 上的错误

Posted

技术标签:

【中文标题】问:Form 和 TextField [SwiftUI] 上的错误【英文标题】:Q: Bug on Form and TextField [SwiftUI] 【发布时间】:2021-10-27 05:47:17 【问题描述】:

当我在Form 中使用TextField 时,直到点击该字段才会显示正确的值。

名称字段最初显示为dummy,点击后变为shuji

如果我将Form 更改为VStack,则会显示初始值。

ContentView.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 上测试

【问题讨论】:

我想知道这在 iOS 14.x 中是否有效? 【参考方案1】:

要“让它工作”,请将.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)
    

【讨论】:

我在 iOS 15 中遇到了同样的问题,这确实有效。谢谢!

以上是关于问:Form 和 TextField [SwiftUI] 上的错误的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局创建对齐的表单

如何使用 Swift 保存从 tableView 上的 textField 收到的用户答案

我在 Swift UI 中的 TextField 对点击和单击无响应,无法输入文本,代码有问题吗?

无法将 Ext.form.TextField 呈现到 XTemplate 的输出中

一个swift版简单的用户名和密码输入textField

获取 Button 和 Textfield 数据,当它们在 swift 5 中以编程方式添加时