【发布时间】:2016-11-24 14:35:52
【问题描述】:
我正在为 NSMenu 项目使用自定义视图,因此我可以通过 isHighlighted 控制背景颜色。
问题是,如果您同时使用鼠标和键盘来导航菜单,则可能会同时选择两个项目。这是因为 drawRect 没有被调用某些项目来取消突出显示它们
还有其他人遇到过这种情况吗?
【问题讨论】:
我正在为 NSMenu 项目使用自定义视图,因此我可以通过 isHighlighted 控制背景颜色。
问题是,如果您同时使用鼠标和键盘来导航菜单,则可能会同时选择两个项目。这是因为 drawRect 没有被调用某些项目来取消突出显示它们
还有其他人遇到过这种情况吗?
【问题讨论】:
NSMenuItems 应该使用以下方法创建:
NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:@selector(menuItemSelected:) keyEquivalent:@""];
其中选择器 menuItemSelected: 是一个有效的方法。如果未提供有效的操作选择器,则不会切换 isHighlighted
【讨论】:
符合NSMenuDelegate并实现如下功能:
func menu(_ menu: NSMenu, willHighlight item: NSMenuItem?) {
for item in menu.items.compactMap({ return $0.isHighlighted ? $0 : nil }) {
item.view?.needsDisplay = true
}
}
【讨论】: