I was able to do this by adding Section for the @TableColumnBuilder in this Table initializer.
A (reduced) code sample:
struct ImportTrackTable: View {
@EnvironmentObject var store: Store
@State var selectedTracks: Set<Track.ID> = .init()
// Sorting
@State private var sortOrder: [KeyPathComparator<Binding<Track>>] = [
.init(\.title.wrappedValue, order: .forward),
]
private let titleComparator = KeyPathComparator<Track>(\.title, order: .forward)
var body: some View {
Table(
of: Binding<Track>.self,
selection: $selectedTracks,
sortOrder: $sortOrder
) {
TableColumn(
"Title",
value: \Binding<Track>.wrappedValue,
comparator: titleComparator
) { trackBinding in
TrackTextField(text: trackBinding.title)
}
TableColumn(
"Genres",
value: \Binding<Track>.wrappedValue.genreList
)
} rows: {
Section("Unassigned") {
ForEach(
$store.tracks
.sorted(using: sortOrder)
.filter({ track in
// Cool filter logic
})
) { $track in
TableRow($track)
.draggable($track.wrappedValue)
}
}
Section("Assigned") {
ForEach(
$store.tracks
.sorted(using: sortOrder)
) { $track in
TableRow($track)
.draggable($track.wrappedValue)
}
}
}
}
}
Topic:
UI Frameworks
SubTopic:
SwiftUI
Tags: