代码之家  ›  专栏  ›  技术社区  ›  niknamelogin

在NSCollectionView中按顺序移动所选内容

  •  2
  • niknamelogin  · 技术社区  · 7 年前

    如何进行选择 按顺序移动 ,像按索引排列的项目?

    Screenshot from developer.apple.com

    1 回复  |  直到 7 年前
        1
  •  2
  •   modusCell    7 年前

    我也向苹果开发者技术支持提出了同样的问题,在检查后,他们说“我们的工程师已经审查了您的请求,并决定最好将其作为错误报告处理。”。我向苹果的雷达提交了错误报告。到目前为止没有回应。

    我决定实施自己的解决方案。子类化您的 NSCollectionView 并覆盖按键按下事件。

    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)
    }
    

    这会中断左右箭头键输入,并将选择移动到上一个/下一个单元格。自从 命令 控制 .

    希望有帮助。