我正在尝试复制类似的行为NavigationLink,但在工作表而不是新屏幕上显示新视图。
目前,列表会迭代我的结构microphones数组,并使用参数和按钮填充每个条目以显示一个工作表,其中显示该工作表的其余信息MicrophoneForEachMicrophone.modelMicrophone。
但是,列表中的第一个条目显示 的详细信息表microphones[1],列表中的所有其他条目显示 的详细信息表microphones[0]。是否可以通过这种方式动态生成sheet的内容?
这是生成列表的菜单视图:
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) { …Run Code Online (Sandbox Code Playgroud) 下面的 swiftUI 代码在 iOS13 上运行良好,但在使用 iOS14 进行测试时,我在尝试显示模式表时遇到了由 force-unwrapped optional 引起的致命错误。据我所知,工作表永远不应该尝试为 selectedModel 显示一个 nil 值,因为 ShowDetails 仅在分配 selectedModel 后才变为真?
struct SpeakerBrandMenu: View {
var filteredSpeakers: [Speaker] {
// An array of Speaker objects
}
@State var selectedModel: Speaker?
@State private var showingDetails = false
var body: some View {
List{
ForEach(filteredSpeakers) { speaker in
HStack {
Button(action: {
self.selectedModel = speaker
self.showingDetails = true
}) {
SpeakerModelRow(speaker: speaker).contentShape(Rectangle())
}
.buttonStyle(PlainButtonStyle())
Spacer()
Button(
//unrelated
).padding(5)
}
}
} .sheet(isPresented: self.$showingDetails) { SpeakerDetailView(speaker: …Run Code Online (Sandbox Code Playgroud)