我们如何在 SwiftUI 中访问 List 的 DisclosureGroup?
How we can get access of DisclosureGroup of List in SwiftUI?
我正在使用此代码在 SwiftUI 2.0 whit macOs 10.15.7
中的列表中显示我的 parent 和 children 数据
默认情况下,我的 parent 处于崩溃状态!我喜欢用我的 Button Action 强制其中一些扩展,我有那个 Buttons。有谁知道如何解决这个问题?
这是我的代码:
import SwiftUI
struct staticData: Identifiable
{
let id = UUID()
var NameOfItem : String
var dynamicData : [staticData]?
}
let Child1 = staticData(NameOfItem: "Child1")
let Child2 = staticData(NameOfItem: "Child2")
let Child3 = staticData(NameOfItem: "Child3")
let parent1 = staticData(NameOfItem: "parent1", dynamicData: [Child1, Child2, Child3])
let parent2 = staticData(NameOfItem: "parent2", dynamicData: [Child1, Child2])
let parent3 = staticData(NameOfItem: "parent3")
struct ContentView: View
{
@State var items: [staticData] = [parent1, parent2, parent3]
var body: some View
{
VStack
{
HStack
{
Spacer()
Button("Expand parent1")
{
}
Spacer()
Button("Collapse parent1")
{
}
Spacer()
}
List(items, children: \.dynamicData) { row in
Text(row.NameOfItem)
.onTapGesture
{
print(row.id)
print(row.NameOfItem)
print(row.dynamicData?.count ?? 0)
}
}
}
}
}
这是一个可能的方法演示。 (当然,在你这边,最好在较小的 sub-views 上分开,比如 HeaderView、ExpandableRowView、FlatRowView 等)
struct staticData: Identifiable, Hashable
{
let id = UUID()
var NameOfItem : String
var dynamicData : [staticData]?
}
let Child1 = staticData(NameOfItem: "Child1")
let Child2 = staticData(NameOfItem: "Child2")
let Child3 = staticData(NameOfItem: "Child3")
let parent1 = staticData(NameOfItem: "parent1", dynamicData: [Child1, Child2, Child3])
let parent2 = staticData(NameOfItem: "parent2", dynamicData: [Child1, Child2])
let parent3 = staticData(NameOfItem: "parent3")
struct ContentView: View
{
@State var items: [staticData] = [parent1, parent2, parent3]
@State var expanded = false
var body: some View
{
VStack
{
HStack
{
Spacer()
Button("Expand parent1")
{
withAnimation { self.expanded = true }
}
Spacer()
Button("Collapse parent1")
{
withAnimation { self.expanded = false }
}
Spacer()
}
List {
ForEach(Array(items.enumerated()), id: \.1) { i, item in
if i == 0 {
DisclosureGroup(isExpanded: $expanded )
{
ForEach(item.dynamicData ?? []) { child in
Text(child.NameOfItem)
}
} label: {
Text(item.NameOfItem)
.onTapGesture
{
print(item.id)
print(item.NameOfItem)
print(item.dynamicData?.count ?? 0)
}
}
} else if item.dynamicData != nil {
DisclosureGroup
{
ForEach(item.dynamicData ?? []) { child in
Text(child.NameOfItem)
}
} label: {
Text(item.NameOfItem)
.onTapGesture
{
print(item.id)
print(item.NameOfItem)
print(item.dynamicData?.count ?? 0)
}
}
} else {
Text(item.NameOfItem)
}
}
}
}
}
}
我正在使用此代码在 SwiftUI 2.0 whit macOs 10.15.7
中的列表中显示我的 parent 和 children 数据默认情况下,我的 parent 处于崩溃状态!我喜欢用我的 Button Action 强制其中一些扩展,我有那个 Buttons。有谁知道如何解决这个问题?
这是我的代码:
import SwiftUI
struct staticData: Identifiable
{
let id = UUID()
var NameOfItem : String
var dynamicData : [staticData]?
}
let Child1 = staticData(NameOfItem: "Child1")
let Child2 = staticData(NameOfItem: "Child2")
let Child3 = staticData(NameOfItem: "Child3")
let parent1 = staticData(NameOfItem: "parent1", dynamicData: [Child1, Child2, Child3])
let parent2 = staticData(NameOfItem: "parent2", dynamicData: [Child1, Child2])
let parent3 = staticData(NameOfItem: "parent3")
struct ContentView: View
{
@State var items: [staticData] = [parent1, parent2, parent3]
var body: some View
{
VStack
{
HStack
{
Spacer()
Button("Expand parent1")
{
}
Spacer()
Button("Collapse parent1")
{
}
Spacer()
}
List(items, children: \.dynamicData) { row in
Text(row.NameOfItem)
.onTapGesture
{
print(row.id)
print(row.NameOfItem)
print(row.dynamicData?.count ?? 0)
}
}
}
}
}
这是一个可能的方法演示。 (当然,在你这边,最好在较小的 sub-views 上分开,比如 HeaderView、ExpandableRowView、FlatRowView 等)
struct staticData: Identifiable, Hashable
{
let id = UUID()
var NameOfItem : String
var dynamicData : [staticData]?
}
let Child1 = staticData(NameOfItem: "Child1")
let Child2 = staticData(NameOfItem: "Child2")
let Child3 = staticData(NameOfItem: "Child3")
let parent1 = staticData(NameOfItem: "parent1", dynamicData: [Child1, Child2, Child3])
let parent2 = staticData(NameOfItem: "parent2", dynamicData: [Child1, Child2])
let parent3 = staticData(NameOfItem: "parent3")
struct ContentView: View
{
@State var items: [staticData] = [parent1, parent2, parent3]
@State var expanded = false
var body: some View
{
VStack
{
HStack
{
Spacer()
Button("Expand parent1")
{
withAnimation { self.expanded = true }
}
Spacer()
Button("Collapse parent1")
{
withAnimation { self.expanded = false }
}
Spacer()
}
List {
ForEach(Array(items.enumerated()), id: \.1) { i, item in
if i == 0 {
DisclosureGroup(isExpanded: $expanded )
{
ForEach(item.dynamicData ?? []) { child in
Text(child.NameOfItem)
}
} label: {
Text(item.NameOfItem)
.onTapGesture
{
print(item.id)
print(item.NameOfItem)
print(item.dynamicData?.count ?? 0)
}
}
} else if item.dynamicData != nil {
DisclosureGroup
{
ForEach(item.dynamicData ?? []) { child in
Text(child.NameOfItem)
}
} label: {
Text(item.NameOfItem)
.onTapGesture
{
print(item.id)
print(item.NameOfItem)
print(item.dynamicData?.count ?? 0)
}
}
} else {
Text(item.NameOfItem)
}
}
}
}
}
}