【问题标题】:Add new Element in Picker in SwiftUI在 SwiftUI 的 Picker 中添加新元素
【发布时间】:2019-09-17 05:22:24
【问题描述】:

我找不到如何在 SwiftUI 的选取器视图中添加一些元素,在我的示例中,我想在单击按钮时在选取器中添加“Z”值。

struct ContentView: View {
@State var values: [String] = ["A", "B", "C"]

@State private var selectedValue = 0

var body: some View {
    NavigationView {
        Form {
            Section {
                Picker(selection: $selectedValue, label: Text("Value")) {
                    ForEach(0 ..< values.count) {
                        Text(self.values[$0])

                    }
                }
            }
            Button(action: {
        self.values.append("Z")
            }, label: {
                Text("Add")
            })
        }.navigationBarTitle("Select a value")

    }
}

当我点击按钮时,Z 被添加到“values”数组中,但 Picker 没有刷新。

谢谢你:)

【问题讨论】:

    标签: ios swiftui picker


    【解决方案1】:

    您必须通过 id 识别 SwiftUI 的值,以使其更改可检测:

    ForEach(0 ..< self.values.count, id: \.self) {
        Text(self.values[$0])
    }
    

    这样 SwiftIU 知道它应该在更改时重建选择器。

    提示:您可以像这样直接使用元素:

    ForEach(values, id: \.self) {
        Text($0)
    }
    

    不要忘记更改 selectedValue 类型和值以匹配您按照上述提示操作的数据源 IF

    @State private var selectedValue = "A"
    

    【讨论】:

    • 我试过你的提示,但 selectedValue 没有更新?
    • 那么你应该改变selectedValue的类型和值来匹配数据源。答案已更新。
    • 啊哈,这是逻辑,谢谢。
    【解决方案2】:

    将 selectedValue 从 int 更改为 String

    @State private var selectedValue = "A"
    

    添加参数id和标签修饰符

    Picker(selection: $selectedValue, label: Text("Value")) {
        ForEach(values, id: \.self) {
            Text($0).tag(String($0))
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多