objective-c – 点击后删除NSMenuItem中的突出显示?

我已经为我的子类NSMenuItem(位于NSStatusMenu中)添加了一个自定义视图,这意味着默认情况下它不会被蓝色/灰色背景“突出显示”.

我通过使用以下代码实现了这一点:

- (void)drawRect:(NSRect)rect {
  BOOL isHighlighted = [menuItem isHighlighted];
  if (isHighlighted) {
    [[NSColor selectedMenuItemColor] set];
    [NSBezierPath fillRect:rect];
    [menuItem addHover];
  } else {
    [super drawRect:rect];
    [menuItem removeHover];
  }
}

- (void)mouseUp:(NSEvent*)event {
  NSMenuItem *item = [self enclosingMenuItem];
  NSMenu *menu = [item menu];
  [menu cancelTracking];
  [menu performActionForItemAtIndex:[menu indexOfItem:item]];
}

菜单项突出显示正常,我也可以点击每个项目;然而,当我点击它们时,一旦我重新打开菜单,它们似乎保持isHighlighted状态.

有没有办法改变它,所以当我点击时,突然显示的状态会在我下次打开菜单时被删除?

最佳答案 让我想到我们必须这样做,而不是简单的NSMenuItem setHighlighted,或NSMenu removeHighlights,或其他东西.这是一个看起来很像MrWalker答案的片段.它只是从菜单中删除你自己的菜单项并将其放回原位.

    NSMenuItem *selfmi = [self enclosingMenuItem];
    NSMenu* menu = [[self enclosingMenuItem] menu];

    int i = [menu indexOfItem:selfmi];
    [menu removeItemAtIndex:i];
    [menu insertItem:selfmi atIndex:i];
点赞