我的 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)
}
}
}
看到这个屏幕:
最佳答案
好吧,这当然看起来像一个错误,但他们按照他们记录的那样做 - 显示所选标签的目的地,仅此而已。无论如何,可能值得提交反馈。
这是一个可行的解决方法。已使用 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)
}
}
}
}
关于swiftui - NavigationLink 中的选择不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61003652/