NSMenuItem自定义视图drawRect并不总是被称为

时间:2016-11-24 14:35:53

标签: macos cocoa appkit nsmenu

我使用NSMenu项目的自定义视图,因此我可以通过isHighlighted控制背景颜色。

问题是,如果您使用鼠标和键盘的组合来导航菜单,则可以一次选择两个项目。这是因为drawRect没有被某些项目调用以取消它们

还有其他人遇到过这个吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

应使用以下方法创建NSMenuItem:

     NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:@selector(menuItemSelected:) keyEquivalent:@""];

其中选择器menuItemSelected:是一个有效的方法。如果未提供有效的操作选择器,则不会切换isHighlighted

答案 1 :(得分:0)

符合NSMenuDelegate并实现以下功能:

func menu(_ menu: NSMenu, willHighlight item: NSMenuItem?) {
    for item in menu.items.compactMap({ return $0.isHighlighted ? $0 : nil }) {
        item.view?.needsDisplay = true
    }
}