По умолчанию выбор в NSCollectionView перемещается клавишами со стрелками в пределах одной строки (или столбца).
Как сделать так, чтобы выделение двигалось последовательно, как элементы, упорядоченные по индексу?
По умолчанию выбор в NSCollectionView перемещается клавишами со стрелками в пределах одной строки (или столбца).
Как сделать так, чтобы выделение двигалось последовательно, как элементы, упорядоченные по индексу?
Я задал тот же вопрос в службу технической поддержки разработчиков Apple, после проверки они сказали: «Наши инженеры рассмотрели ваш запрос и решили, что это лучше всего обработать как отчет об ошибке». Я отправил отчет об ошибке на радар Apple. Пока нет ответа.
Я решил реализовать собственное решение. Подкласс вашего NSCollectionView
и переопределите событие keyDown.
Свифт 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)
}
Это прерывает ввод клавиш со стрелками влево и вправо и перемещает выбор на предыдущую/следующую ячейку. Поскольку «Разрешить множественный выбор» должно быть НЕТ. Также отключите клавиши-модификаторы, такие как CMD или Control.
Если вы продолжаете нажимать стрелку вправо, когда выбор доходит до последней ячейки справа, он перескакивает на одну строку вниз и продолжает двигаться, или наоборот для стрелки влево. Надеюсь, поможет.
float
,custom
,grid
иlegacy
, но когда выделение достигает границы (левой/правой), ничего не происходит. Он остается неподвижным, когда вы пытаетесь переместить выделение клавишами на клавиатуре. - person niknamelogin   schedule 15.10.2017