SwiftUI:选择器不会更新同一视图中的文本

2024-01-31

我有这个简单的情况:

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() 中的名称不会更新。 然而,当再次点击选择器时,所选用户附近有一个勾号,这意味着该值实际上已被选择。那么为什么文本不更新呢?

感谢您的帮助


选择类型和选择器内容id or 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))
            }
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI:选择器不会更新同一视图中的文本 的相关文章

随机推荐