在我的 OSX 应用程序中,我有一个 Collection View ,它是 NSCollectionView
的子类。
我对一切都很满意,除了上下文菜单,我还不知道。
所以我想要的是:
- 右键单击 Collection View 项会弹出上下文菜单
- 从菜单中选择的选项(删除、编辑等)将应用于所执行的点击的项目。
我知道如何为 NSOutlineView
或 NSTableView
执行此操作,但不知道如何为 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/