【问题标题】:NSMenuItem custom view drawRect not always calledNSMenuItem 自定义视图 drawRect 并不总是被调用
【发布时间】:2016-11-24 14:35:52
【问题描述】:

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

问题是,如果您同时使用鼠标和键盘来导航菜单,则可能会同时选择两个项目。这是因为 drawRect 没有被调用某些项目来取消突出显示它们

还有其他人遇到过这种情况吗?

【问题讨论】:

    标签: macos cocoa appkit nsmenu


    【解决方案1】:

    NSMenuItems 应该使用以下方法创建:

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

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

    【讨论】:

      【解决方案2】:

      符合NSMenuDelegate并实现如下功能:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-27
        • 2011-06-23
        • 2017-07-06
        • 1970-01-01
        • 2015-01-15
        • 1970-01-01
        • 2011-08-10
        相关资源
        最近更新 更多