7

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

有谁知道在打开菜单时按下 alt 键时如何通知我,无论是通过委托还是子类化?

4

1 回答 1

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
    }
}
于 2010-04-10T04:12:37.867 回答