4

我有一个里面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它就像一个魅力。

4

0 回答 0