SwiftUI:从列表中的项目获取切换状态

Posted

技术标签:

【中文标题】SwiftUI:从列表中的项目获取切换状态【英文标题】:SwiftUI: Get toggle state from items inside a List 【发布时间】: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") 

  

【问题讨论】:

【参考方案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

以上是关于SwiftUI:从列表中的项目获取切换状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TabView SwiftUI 中保存视图的列表状态

滚动列表中的项目时丢弃 SwiftUI 状态

在不使用导航链接的情况下获取 SwiftUI 列表中的选定项目

如何从firestore中检索swiftUI中的预定义项目列表?

使用 SwiftUI 从转换目的地返回时,我想将显示的列表更新为最新状态

从 SwiftUI 列表中的每个元素获取用户输入