swiftui - NavigationLink 中的选择不起作用

标签 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

最佳答案

好吧,这当然看起来像一个错误,但他们按照他们记录的那样做 - 显示所选标签的目的地,仅此而已。无论如何,可能值得提交反馈。

这是一个可行的解决方法。已使用 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/

相关文章:

SwiftUI Sheet 不更新变量

swiftui - Xcode 11 未在 SwiftUI 中显示对象库

swiftui - NavigationLink View 参数 SwiftUI

VStack 中的 SwiftUI View 相互重叠

SwiftUI NavigationView 嵌套 TabView 自动弹出

SwiftUI Timer.publish 导致整个屏幕刷新

SwiftUI:如何更改 TabView 高度?

image - 是否可以使用相同的图像通过淡入淡出动画更改图像? (SwiftUI)

ios - 如何使用异步构建 SwiftUI View

swift - 如何为 Swift UI 添加字符的最大长度