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 列表中的选定项目
如何从firestore中检索swiftUI中的预定义项目列表?