问: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 对点击和单击无响应,无法输入文本,代码有问题吗?