我有一个里面NSCollectionView有一堆NSViews ,垂直堆叠,使它看起来有点像UIKit's UITableView。一切都按预期工作,除了一件事:
当右键单击任何一个NSViews 时,我希望NSMenuI set to be viewmenu会显示出来,但是很遗憾 - 什么也没有发生。
疯狂的部分是所有正确的方法都被调用了,正如预期的那样:-rightMouseDown:和-menuForEvent:finally -menu。
当我将任何对象设置为NSMenu's时delegate,不会调用它,所以在我看来,Apple 方面的某些事情发生了故障,就在请求's和实际显示它之间。menuWillOpen:menu
有人能对此有所了解吗?
提前致谢。
PS。对于它的价值,NSMenu我手动(不依赖于 Apple 的右键单击处理)使用popUpMenuPositioningItem:atLocation:inView: 显示。
编辑/更新/澄清
有NSCollectionView问题的是在单击NSWindowan 时显示的内部NSStatusItem,例如 CoverSutra/TicToc/what have you。子类的一些代码MyWindow NSWindow:
- (void)awakeFromNib {
[self setStyleMask:NSBorderlessWindowMask];
[self setExcludedFromWindowsMenu:YES];
}
- (BOOL)canBecomeMainWindow {
return YES;
}
- (BOOL)canBecomeKeyWindow {
return YES;
}
- (BOOL)isMovable {
return NO;
}
- (void)presentFromPoint:(NSPoint)point {
point.y -= self.frame.size.height;
point.x -= self.frame.size.width / 2;
[self setFrameOrigin:point];
[self makeMainWindow];
[self makeKeyAndOrderFront:self];
}
presentFromPoint:是我用来从我喜欢的任何一点呈现它的方法,就我而言,是从NSStatusItem. (与此问题无关)
顺便说一句,我的应用程序已设置为,因此LSUIElement它不显示菜单栏或 Dock 图标。它位于状态栏中,并在单击时显示一个窗口。Info.plistYESNSStatusItem
视图层次结构如下:
MyWindow=> contentView=> NSScrollView=>NSCollectionView
NSCollectionView有一个NSCollectionViewItem连接到它的属性的子类itemPrototype,并且NSCollectionViewItem子类有一个NSView连接到它的view属性的子类。反过来,子类与它的属性NSView有一个NSMenu连接。menu最后但并非最不重要的一点是:里面NSMenu有一个。NSMenuItem
NSCollectionViewItem到目前为止,子类和子类都NSView没有做任何有趣的事情,它们只是空的子类。
NSMenu连接到NSView' 的属性是右键单击menu时应该显示的内容,但我希望我已经说清楚了:它实际上并没有显示。NSView
更新
我仍然不知道是什么导致了这个问题,但我决定从 '继续' NSCollectionView,因为它并不真正适合我想要做的事情,我现在正在使用TDListView它就像一个魅力。