Я пытаюсь повторить поведение, подобное NavigationLink
, но отображаю новый вид на листе вместо нового экрана.
В настоящее время список повторяется по microphones
, который является массивом моей структуры Microphone
с ForEach
, и заполняет каждую запись параметром Microphone.model
и кнопкой для отображения листа, на котором отображаются остальные информации для этого Microphone
.
Однако первая запись в списке отображает подробный лист для microphones[1]
, а все остальные записи в списке отображают подробный лист для microphones[0]
. Можно ли динамически генерировать содержимое листа таким образом?
Это представление меню, генерирующее список:
import SwiftUI
struct BrandMenu: View {
var brand: String
var filteredMicrophones: [Microphone] {
let allMicrophones: [Microphone] = Bundle.main.decode("MicrophoneTestData.json")
var filtered: [Microphone] = []
for microphone in allMicrophones {
if microphone.brand == brand {
filtered.append(microphone)
}
}
let sorted = filtered.sorted { $0.model < $1.model }
return sorted
}
@State private var showingDetails = false
var body: some View {
List(filteredMicrophones) { microphone in
if microphone.brand == self.brand {
Button(action: {self.showingDetails = true}) {
MicModelRow(microphone: microphone).contentShape(Rectangle())
}
.buttonStyle(PlainButtonStyle())
.sheet(isPresented: self.$showingDetails) {
MicDetailView(microphone: microphone, showSheet: self.$showingDetails)
}
}
}
.navigationBarTitle(Text(brand), displayMode: .inline)
}
}