NSMenu中的替代菜单项

时间:2010-04-09 10:23:55

标签: cocoa menu macos-carbon nsmenu nsmenuitem

我的NSMenu包含NSMenuItems个自定义视图。我想要它,以便当按下alt按钮时,菜单项将改变它们的一部分外观(通过它们的视图)。我在setAlternative文档中找到了NSMenuItem,但实际上我只能在没有自定义视图的情况下使用NSMenuItems。一旦我设置了自定义视图,就会显示所有菜单项。 此外,我尝试在菜单打开时获取按键事件。由于其他运行循环,NSApplication's sendEvent:在菜单关闭之前才会收到事件。因此,我不能只是拦截即将发生的事件。

有没有人知道如何通过委托或子类化来通知菜单打开时何时按下alt键?

1 个答案:

答案 0 :(得分:6)

您应该将对象设置为菜单的委托,然后实现委托方法-menu:updateItem:atIndex:shouldCancel:

这将允许您在显示菜单项之前根据当前修改器状态更改自定义视图的状态。

您可以通过询问[[NSApp currentEvent] modifierFlags]来获取当前修饰符。

如果您需要在菜单打开时通知修改标记更改,请在自定义视图中实施-flagsChanged:方法:

- (void)flagsChanged:(NSEvent*)event
{
    if ([event modifierFlags] & NSAlternateKeyMask)  // check for option key
    {
        //do something
    }
    else
    {
        //do something else
    }
}