分段选择器视图选择具有相同索引的部分中的所有行

问题描述

我正在尝试创建一个包含部分的 .burger div{ width: 30px; height: 3px; background-color: #f7082d; margin: 7px; transition: all 0.3s ease; } .nav-links { display: flex; justify-content: space-around; width: 30%; } .nav-links li { list-style: none; } .nav-links a { color: #000; text-decoration: none; letter-spacing: 3px; font-weight: bold; font-size: 2vh; }

每个项目都符合“id”,我用项目的 id 标记 PickerView(这是唯一的,我确认没有冲突)

Text 似乎忽略了我分配的标签,并为每个部分选择了具有相同对应索引的所有行

我还尝试用随机 UUID 标记每个项目以检查行为,它似乎继续

PickerView

解决方法

tag 应该与 selection 的类型相同,因为它用于匹配选择的行。在这种情况下不应修改 id,因为它会完全重新初始化选择器。

提供的代码不可测试,所以这里只是一个解决方案的演示(简化了您的场景的复制)。

使用 Xcode 12.1 / iOS 14.1 测试。

struct Pair: Hashable {
    var section = ""
    var row = -1
}

struct ExperimentPickerView: View {
    var sections = ["A","B","C"]
    var rows = Array(0..<5)

    @State private var picked = Pair(section: "B",row: 2) // << here !! (initialised demo)

    var body: some View {
        Picker("active",selection: $picked) {
            ForEach(sections,id: \.self) { section in
                Section(header: Text("\(section)").bold()) {
                    ForEach(rows,id: \.self) { i in
                        Text("\(section) \(i)")
                           .tag(Pair(section: section,row: i))   // << match !!
                    }
                }
            }
        }.onReceive([self.picked].publisher.first()) { (value) in
            print(value)
        }
    }
}

demo1

demo2

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...