Skip Fuse is now free for indie developers!
Menu

DisclosureGroup

Skip support for SwiftUI.DisclosureGroup.

The following example screens and source code is from SkipUI’s Showcase sample app DisclosureGroupPlayground.swift

import SwiftUI

struct DisclosureGroupPlayground: View {
    @State var expanded = false
    @State var nestedModel = DisclosureGroupPlaygroundModel(title: "Multi-Level", items: ["AAAA", "BBBB", "CCCC"], nested: [DisclosureGroupPlaygroundModel(title: "Nested", items: ["1111", "2222", "3333"])])

    var body: some View {
        ScrollView {
            VStack(spacing: 16) {
                Button("Toggle Group") {
                    withAnimation { expanded = !expanded }
                }
                .buttonStyle(.bordered)
                DisclosureGroup("DisclosureGroup", isExpanded: $expanded) {
                    Text("AAAA")
                    Text("BBBB")
                    Text("CCCC")
                }
                DisclosureGroup(nestedModel.title, isExpanded: $nestedModel.isExpanded) {
                    ForEach(nestedModel.items, id: \.self) { text in
                        Text(text)
                    }
                    ForEach($nestedModel.nested, id: \.title) { $item in
                        DisclosureGroup(item.title, isExpanded: $item.isExpanded) {
                            ForEach(item.items, id: \.self) { text in
                                Text(text)
                            }
                        }
                    }
                }
                DisclosureGroup("Disabled", isExpanded: $expanded) {
                    Text("AAAA")
                    Text("BBBB")
                    Text("CCCC")
                }
                .disabled(true)
            }
            .padding()
        }
        .toolbar {
            PlaygroundSourceLink(file: "DisclosureGroupPlayground.swift")
        }
    }
}

struct DisclosureGroupPlaygroundModel {
    var title = ""
    var isExpanded = false
    var items: [String] = []
    var nested: [DisclosureGroupPlaygroundModel] = []
}