默认情况下,NSCollectionView中的选择会被一行(或列)中的箭头键移动。
如何选择顺序移动,就像索引排列的项目一样?
答案 0 :(得分:1)
我向Apple开发人员技术支持部门提出了同样的问题,经过检查后他们说“我们的工程师已经审核了您的请求,并确定最好将其作为错误报告处理。”我向Apple的雷达提交了错误报告。到目前为止没有回应。
我决定实施自己的解决方案。对您的NSCollectionView
进行子类化并覆盖keyDown事件。
Swift 4
override func keyDown(with event: NSEvent) {
if event.modifierFlags.rawValue == 10617090 {
return
}
if event.isARepeat == true && event.keyCode != 123 && event.keyCode != 124 && event.keyCode != 125 && event.keyCode != 126 {
return
}
if event.keyCode == 123 || event.keyCode == 124 || event.keyCode == 125 || event.keyCode == 126 {
for index in self.selectionIndexes {
if event.keyCode == 124 && index < YOUR_DATASOURCE_ARRAY.count - 1 {
self.deselectItems(at: [NSIndexPath(forItem: index, inSection: 0) as IndexPath])
self.selectItems(at: [NSIndexPath(forItem: index + 1, inSection: 0) as IndexPath], scrollPosition: NSCollectionView.ScrollPosition.nearestHorizontalEdge)
return
}
if event.keyCode == 123 && index > 0 {
self.deselectItems(at: [NSIndexPath(forItem: index, inSection: 0) as IndexPath])
self.selectItems(at: [NSIndexPath(forItem: index - 1, inSection: 0) as IndexPath], scrollPosition: NSCollectionView.ScrollPosition.nearestHorizontalEdge)
return
}
}
}
super.keyDown(with: event)
}
这会中断左右箭头键输入并将选择移动到上一个/下一个单元格。以来 “允许多项选择”必须为NO。同时禁用修饰键,如 CMD 或 Control 。
如果你一直按右箭头,当选择到达右手的最后一个单元格时,它会向下跳一行并保持移动,反之亦然左箭头。 希望能帮助到你。