【问题标题】:SwiftUI: Get toggle state from items inside a ListSwiftUI:从列表中的项目获取切换状态
【发布时间】:2020-04-02 14:42:13
【问题描述】:

我正在构建一个应用程序,我在视图中生成一个动态列表,该列表中的项目有一个切换按钮。如果按下父视图中的按钮并且所有项目都激活了它们的切换。然后进行一个函数。

如何获取所有列表项的@state 以便在按下按钮时执行该功能。

这是它的一些基本代码:

struct OrderView: View {

  var pOrder: OrderObject

  var body: some View {

    VStack(alignment: .leading){

      Button(action: buttonAction) { Text("myBttn") }

      List(pOrder.contents, id: \.name) { item in

        Child(pOrder: item)

      }
    }
  }
}

这是子视图的代码

struct Child: View {

  var pContents: Contents

  @State var selected: Bool = false

  var body: some View {

    Toggle(isOn: $selected){ Text("Item") }

  }
}

【问题讨论】:

    标签: list swiftui


    【解决方案1】:
    struct ObjectOrder: Identifiable {
        var id = UUID()
        var order = ""
        var isToggled = false
    
        init(order: String) {
            self.order = order
        }
    }
    
    struct ContentView: View {
    
        @State var pOrder = [
            ObjectOrder(order: "Order1"),
            ObjectOrder(order: "Order2"),
            ObjectOrder(order: "Order3"),
            ObjectOrder(order: "Order4"),
            ObjectOrder(order: "Order5")
        ]
    
        var body: some View {
    
            List(pOrder.indices) { index in
                HStack {
                    Text("\(self.pOrder[index].order)")
                    Toggle("", isOn: self.$pOrder[index].isToggled)
                }
            }
        }
    }
    

    尝试使用 .indices 将为您提供数组中对象的索引。添加一个属性来跟踪切换(上面示例中的 isToggled)将允许您存储和跟踪对象的切换状态。

    【讨论】:

    • 这部分工作,直到列表更改(它是动态的)并且 ForEach 失败。刚刚添加了一个可识别的和工作的。更改行: List(pOrder.indices) { List(pOder.indices, id: \.self) { index in
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2022-06-21
    相关资源
    最近更新 更多