我的 iPad 应用具有以下代码:
struct ContentView: View {
@State var selectionIndex: Int? = nil
var body: some View {
NavigationView {
VStack {
ForEach(0..<5) { tag in
NavigationLink("Link \(tag)", destination: DetailView(name: "View \(tag)"), tag: tag, selection: self.$selectionIndex)
.foregroundColor((self.selectionIndex ?? 0) == tag ? Color.red : Color.black)
}
}
}
}
}
struct DetailView: View {
var name: String
var body: some View {
Text(self.name)
}
}
按链接可以完美地工作,并且还可以更改DetailView。我尝试突出显示所选按钮,因此保存了selectionIndex。
不幸的是,有时候selectionIndex会重置为0。我在做什么错了?
编辑
将NavigationLink
包装为List
会显示出更好的问题,因为List拥有自己的选择(此选择保留,但我自己的var selectionIndex
重置)。
NavigationView {
List {
ForEach(0..<5) { tag in
NavigationLink("Link \(tag)", destination: DetailView(name: "View \(tag)"), tag: tag, selection: self.$selectionIndex)
.foregroundColor((self.selectionIndex ?? 0) == tag ? Color.red : Color.black)
}
}
}
查看此屏幕:
答案 0 :(得分:2)
好吧,这当然看起来像是个错误,但它们会按照记录进行操作-仅显示选定标签的目标。无论如何,可能值得提交反馈。
这是一种解决方法。经过Xcode 11.4的测试。
@State var selectionIndex: Int? = nil
@State var highlighted: Int? = nil // << explicit !!
var body: some View {
NavigationView {
VStack {
ForEach(0..<5) { tag in
NavigationLink("Link \(tag)", destination:
PadDetailView(name: "View \(tag)").onAppear { self.highlighted = tag },
tag: tag, selection: self.$selectionIndex)
.foregroundColor(self.highlighted == tag ? Color.red : Color.black)
}
}
}
}