代码之家  ›  专栏  ›  技术社区  ›  Alexsander Akers

NSMenuItem的视图(NSView子类的实例)在悬停时未高亮显示

  •  3
  • Alexsander Akers  · 技术社区  · 15 年前

    NSView 子类来绘制一些内容,但当用户悬停时,它不会像高亮显示的那样绘制,并且不会取消 NSMenu

    编辑

    -drawRect: [[self enclosingMenuItem] isHighlighted] 我能够判断我是否需要绘制突出显示的视图,并有机会这样做。我要想的就是怎么做。

    2 回复  |  直到 15 年前
        1
  •  5
  •   papr    15 年前

    也许你应该这样做:

    #define menuItem ([self enclosingMenuItem])
    
    - (void) drawRect: (NSRect) rect {
        BOOL isHighlighted = [menuItem isHighlighted];
        if (isHighlighted) {
            [[NSColor selectedMenuItemColor] set];
            [NSBezierPath fillRect:rect];
        } else {
            [super drawRect: rect];
        }
    }
    
        2
  •  1
  •   papr    15 年前

    我不确定我是否理解你的问题。我想你的意思是:菜单打开了,你所有的画都停止了。我想这是因为打开的NSMenu停止了UI的NSRunLoop线程。两者中的一个。你应该试着在另一个线程中安全地绘制线程。

        3
  •  0
  •   KamyFC    5 年前

    class MenuStackView: NSStackView {
    
    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
    }
    
    required init?(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
    }
    
    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)
        let menuItem = self.enclosingMenuItem
        let isHighlighted = menuItem?.isHighlighted ?? false
        if isHighlighted {
            NSColor.selectedMenuItemColor.set()
            NSBezierPath.fill(dirtyRect)
        } 
    }
    }