macos - 如何实现 NSCollectionView 的上下文菜单

标签 macos cocoa contextmenu nscollectionview

在我的 OSX 应用程序中,我有一个 Collection View ,它是 NSCollectionView 的子类。

我对一切都很满意,除了上下文菜单,我还不知道。

所以我想要的是:

  • 右键单击 Collection View 项会弹出上下文菜单
  • 从菜单中选择的选项(删除、编辑等)将应用于所执行的点击的项目。

我知道如何为 NSOutlineViewNSTableView 执行此操作,但不知道如何为 Collection View 执行此操作。

我不知道如何获取被点击项目的索引。

有人对我如何实现这个有任何想法吗?

非常感谢任何形式的帮助!

最佳答案

基本上我们所有的解决方案都能够满足需求,但我想对swift3+做一个补充,我认为这是一个完整的解决方案。

/// 扩展NSCollectionView功能,增加常用委托
class ANCollectionView: NSCollectionView {
    // 扩展委托方式
    weak open var ANDelegate: ANCollectionViewDelegate?

    override func menu(for event: NSEvent) -> NSMenu? {
        var menu = super.menu(for: event);
        let point = self.convert(event.locationInWindow, from: nil)
        let indexPath = self.indexPathForItem(at: point);
        if ANDelegate != nil{
            menu = ANDelegate?.collectionView(self, menu: menu, at: indexPath);
        }
        return menu;
    }
}

/// 扩展NSCollectionView的委托
protocol ANCollectionViewDelegate : NSObjectProtocol {
    func collectionView(_ collectionView:NSCollectionView, menu:NSMenu?, at indexPath: IndexPath?) -> NSMenu?
}

这是我写的一个扩展,希望对大家有帮助。

关于macos - 如何实现 NSCollectionView 的上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26130872/

相关文章:

linux - go1.5beta2 在 MacOS 和 Linux 上的不同行为

mysql - MAMP:MySQL 无法启动

objective-c - 如何避免在用户关闭时取消分配 NSPanel

windows - 在 Windows 中为特定文件扩展名添加上下文菜单项

python - 为什么当我在 Mac OS X 终端应用程序中键入时不显示标准输入?

python - 尽管使用两级命名空间编译,但库仍需要平面命名空间中的符号

macos - Swift iTunes ScriptingBridge 链接器错误

objective-c - NSTokenField 表示核心数据对多关系

WPF:如何动态生成 ContextMenu

用于菜单和子菜单的 JavaFX2-fxml 标签