我有一个里面NSCollectionView
有一堆NSView
s ,垂直堆叠,使它看起来有点像UIKit
's UITableView
。一切都按预期工作,除了一件事:
当右键单击任何一个NSView
s 时,我希望NSMenu
I set to be viewmenu
会显示出来,但是很遗憾 - 什么也没有发生。
疯狂的部分是所有正确的方法都被调用了,正如预期的那样:-rightMouseDown:
和-menuForEvent:
finally -menu
。
当我将任何对象设置为NSMenu
's时delegate
,不会调用它,所以在我看来,Apple 方面的某些事情发生了故障,就在请求's和实际显示它之间。menuWillOpen:
menu
有人能对此有所了解吗?
提前致谢。
PS。对于它的价值,NSMenu
我手动(不依赖于 Apple 的右键单击处理)使用popUpMenuPositioningItem:atLocation:inView:
显示。
编辑/更新/澄清
有NSCollectionView
问题的是在单击NSWindow
an 时显示的内部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.plist
YES
NSStatusItem
视图层次结构如下:
MyWindow
=> contentView
=> NSScrollView
=>NSCollectionView
NSCollectionView
有一个NSCollectionViewItem
连接到它的属性的子类itemPrototype
,并且NSCollectionViewItem
子类有一个NSView
连接到它的view
属性的子类。反过来,子类与它的属性NSView
有一个NSMenu
连接。menu
最后但并非最不重要的一点是:里面NSMenu
有一个。NSMenuItem
NSCollectionViewItem
到目前为止,子类和子类都NSView
没有做任何有趣的事情,它们只是空的子类。
NSMenu
连接到NSView
' 的属性是右键单击menu
时应该显示的内容,但我希望我已经说清楚了:它实际上并没有显示。NSView
更新
我仍然不知道是什么导致了这个问题,但我决定从 '继续' NSCollectionView
,因为它并不真正适合我想要做的事情,我现在正在使用TDListView
它就像一个魅力。