SwiftUI:选取器不会更新同一视图中的文本
Posted
技术标签:
【中文标题】SwiftUI:选取器不会更新同一视图中的文本【英文标题】:SwiftUI: Picker doesn't update text in same view 【发布时间】:2020-11-16 13:58:21 【问题描述】:我有这种简单的情况:
struct User: Hashable, Identifiable
var id: Int
var name: String
func hash(into hasher: inout Hasher)
hasher.combine(id)
let bob = User(id: 1, name: "Bob")
let john = User(id: 2, name: "John")
let users = [bob, john]
struct ParentView: View
@State private var user: User?
var body: some View
VStack(spacing: 0)
// Other elements in view...
Divider()
ChildPickerView(user: $user)
Spacer()
struct ChildPickerView: View
@Binding var user: User?
var body: some View
HStack
Text("Selected : \(author?.name ?? "--")")
Picker(selection: $user, label: Text("Select a user"))
ForEach(0..<users.count)
Text(users[$0].name)
.padding()
当我在选择器中选择另一个值时,上面的 Text() 中的名称不会更新。 但是,当再次点击选择器时,被选择的用户附近有一个勾号,这意味着该值已经被实际选中。那为什么文字没有更新呢?
感谢您的帮助
【问题讨论】:
【参考方案1】:选择类型和选择器内容id
或tag
应该相同。在下面找到固定的变体。
使用 Xcode 12.1 / ios 14.1 测试。
VStack
Text("Selected : \(user?.name ?? "--")")
Picker(selection: $user, label: Text("Select a user"))
ForEach(users)
Text($0.name).tag(Optional($0))
【讨论】:
以上是关于SwiftUI:选取器不会更新同一视图中的文本的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 2 .onChange() 中的选取器不会更改 UINavigationBar.appearance()