【问题标题】:SwiftUI set a Binding from the String result of a pickerSwiftUI 从选择器的字符串结果中设置绑定
【发布时间】:2019-08-28 15:48:51
【问题描述】:

我正在努力弄清楚如何在我的 SwiftUI 视图中绑定选取的值:

选择器需要绑定到标签返回的 Int。我需要将此 Int 转换为字符串并设置绑定。怎么样?

struct ContentView: View {

   @Binding var operatorValueString:String

    var body: some View {

         Picker(selection: queryType, label: Text("Query Type")) {
             ForEach(0..<DM.si.operators.count) { index in
                 Text(DM.si.operators[index]).tag(index)
             }
         }.pickerStyle(SegmentedPickerStyle())
    }
}

如何以及在哪里设置我的 operatorValueString ?

operatorValueString = DM.si.operators[queryType] //不会编译。

【问题讨论】:

  • 您是否在某处定义了 queryType,Picker 期待绑定。 BTW DM.si.operators.indices 比计数更容易使用。我不喜欢分段选择器。我还必须将 ObservedObject 与 PassthroughSubject 发布者一起使用,以使其按我想要的方式工作。
  • 有样品要分享吗?这让我发疯了。

标签: ios swiftui picker


【解决方案1】:

只要选择器的选择发生变化,您就可以使用自己的自定义绑定设置字符串来实现结果:

struct ContentView: View {
    @State private var operatorString = ""

    var body: some View {
        VStack {
            Subview(operatorValueString: $operatorString)
            Text("Selected: \(operatorString)")
        }
    }
}

struct Subview: View {
    @Binding var operatorValueString: String
    @State private var queryType: Int = 0

    let operators = ["OR", "AND", "NOT"]

    var body: some View {

        let binding = Binding<Int>(
            get: { self.queryType },
            set: {
                self.queryType = $0
                self.operatorValueString = self.operators[self.queryType]
            })

        return Picker(selection: binding, label: Text("Query Type")) {
            ForEach(operators.indices) { index in
                Text(self.operators[index]).tag(index)
            }
        }.pickerStyle(SegmentedPickerStyle())
    }
}

【讨论】:

  • 这就是我最终要做的。似乎 Picker 应该有另一个绑定。
  • 不幸的是,当您返回编辑时,这会导致无限循环。如何设置 Binding 以反映现有选择?
  • @jimijon 我不关注。导致无限循环的代码是什么?
  • 我需要在绑定中公开发送 operatorValueString... 然后我需要将绑定设置为正确的选择器编号。但是,这意味着我需要在 init 中设置 self.querytype,这会导致循环。我一定错过了一些非常明显的东西
  • 这是我用的:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 2017-05-23
  • 2015-03-31
相关资源
最近更新 更多