【问题标题】:SwiftUI: Picker doesn't update text in same viewSwiftUI:选取器不会更新同一视图中的文本
【发布时间】: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() 中的名称不会更新。 但是,当再次点击选择器时,被选择的用户附近有一个勾号,这意味着该值已经被实际选中。那为什么文字没有更新呢?

感谢您的帮助

【问题讨论】:

    标签: swiftui picker


    【解决方案1】:

    选择类型和选择器内容idtag 应该相同。在下面找到固定的变体。

    使用 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))
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多