objective-c – 点击后删除NSMenuItem中的突出显示?
发布时间:2020-12-16 07:25:39 所属栏目:百科 来源:网络整理
导读:我已经为我的子类NSMenuItem(位于NSStatusMenu中)添加了一个自定义视图,这意味着默认情况下它不会被蓝色/灰色背景“突出显示”. 我通过使用以下代码实现了这一点: - (void)drawRect:(NSRect)rect { BOOL isHighlighted = [menuItem isHighlighted]; if (isH
我已经为我的子类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]; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |