NSMenu中的替代菜单项

Nic*_*son 7 cocoa macos-carbon menu nsmenu nsmenuitem

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

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

Rob*_*ger 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
    }
}
Run Code Online (Sandbox Code Playgroud)