【发布时间】:2022-01-18 08:35:29
【问题描述】:
我正在开发一个带有List 视图和可选行的 macOS 应用程序。
因为很遗憾没有editMode
在 macOS 上,单击选择单元格是可能的,但取消选择已选择的单元格执行相同的操作不会执行任何操作。
取消选择单元格的唯一选项是CMD + Click,这不是很直观。
最小示例:
struct RowsView: View {
@State var selectKeeper: String?
let rows = ["1", "2", "3", "4", "5", "6", "7", "8"]
var body: some View {
List(rows, id: \.self, selection: $selectKeeper) { row in
Text(row)
}
}
}
struct RowsView_Previews: PreviewProvider {
static var previews: some View {
RowsView()
}
}
直接附加绑定
我已尝试按照Picker here 的出色答案中所述直接附加Binding,但这似乎不适用于macOS 上的List:
...
var body: some View {
List(rows, id: \.self, selection: Binding($selectKeeper, deselectTo: nil)) { row in
Text(row)
}
}
...
public extension Binding where Value: Equatable {
init(_ source: Binding<Value>, deselectTo value: Value) {
self.init(get: { source.wrappedValue },
set: { source.wrappedValue = $0 == source.wrappedValue ? value : $0 }
)
}
}
关于如何在不重建选择机制的情况下实现单击取消选择的任何想法?
备案:XCode 13.2.1,macOS BigSur 11.6.2
【问题讨论】:
-
确认一下,您要单选还是多选单元格/行?
-
多选,但我引导示例以使其更容易。这两种方式都不起作用
标签: list macos swiftui selection