【问题标题】:NSMenu not calling delegates menuHasKeyEquivalent:NSMenu 不调用代表 menuHasKeyEquivalent:
【发布时间】:2015-08-15 04:16:55
【问题描述】:

我确实设置了一个菜单并分配了一个代表

- (void)constructAndDisplayMenu {

    NSMenu * menu = [[NSMenu alloc] initWithTitle:@""];

    {
        NSMenuItem * item = [[NSMenuItem alloc] initWithTitle:@"1" action:@selector(menuItemPressed:) keyEquivalent:@""];
        [menu addItem:item];
    }
    {
        NSMenuItem * item = [[NSMenuItem alloc] initWithTitle:@"2" action:@selector(menuItemPressed:) keyEquivalent:@""];
        [menu addItem:item];
    }
    {
        NSMenuItem * item = [[NSMenuItem alloc] initWithTitle:@"3" action:@selector(menuItemPressed:) keyEquivalent:@""];
        [menu addItem:item];
    }

    [menu popUpMenuPositioningItem:nil atLocation:NSMakePoint(2,2) inView:self];

    self.menu = menu;
    menu.delegate = self;

}

菜单出现了,我收到了类似menuDidClose: 的委托回调,但我没有接到menuHasKeyEquivalent:forEvent:target:action: 的电话

- (BOOL)menuHasKeyEquivalent:(NSMenu*)menu forEvent:(NSEvent*)event target:(id*)target action:(SEL*)action {

    NSLog(@"%@", event);

    return NO;
}

当键入键盘时,NSMenu 会自动更改突出显示的项目,但没有完成委托回调

【问题讨论】:

    标签: objective-c macos cocoa nsmenu


    【解决方案1】:

    menuHasKeyEquivalent:forEvent:target:action: 方法适用于应用程序的菜单栏,而不适用于上下文菜单。 即使在您使用快捷键时打开了应用程序菜单栏中的菜单,它也不会被调用。

    它的行为没有明确记录,但在WWDC 2010 Session 145 中简要提及。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多