NavigationLink中的选择不起作用

时间:2020-04-03 01:13:07

标签: swiftui

我的 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)
                }
            }
        }

查看此屏幕:

enter image description here

1 个答案:

答案 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)
            }
        }
    }
}