2009-11-09 40 views
7

鼠标点亮是否有当鼠标滑过要强调的是,可以设置一个标志,这将导致可可按钮。我需要在OSX上用目标C进行编程。可可按钮,将在

回答

15

为视图设置跟踪区域addTrackingArea(前提是您使用的是Leopard或更新的OS X)。您将在鼠标输入和鼠标退出时获得事件。

+0

能否请你解释如何使用代码做到这一点(至少在一些例子......)? – mthama 2014-08-04 22:36:24

1

下面的东西也许答案。

class HoverButton: NSButton{ 

var backgroundColor: NSColor? 
var hoveredBackgroundColor: NSColor? 
var pressedBackgroundColor: NSColor? 

private var hovered: Bool = false 

override var wantsUpdateLayer:Bool{ 
    return true 
} 

required init?(coder: NSCoder) { 
    super.init(coder: coder) 
    self.commonInit() 
} 

override init(frame frameRect: NSRect) { 
    super.init(frame: frameRect) 
    self.commonInit() 
} 

func commonInit(){ 
    self.wantsLayer = true 
    self.createTrackingArea() 
    self.hovered = false 
    self.hoveredBackgroundColor = NSColor.selectedTextBackgroundColor() 
    self.pressedBackgroundColor = NSColor.selectedTextBackgroundColor() 
    self.backgroundColor = NSColor.clearColor() 
} 

private var trackingArea: NSTrackingArea! 
func createTrackingArea(){ 
    if(self.trackingArea != nil){ 
     self.removeTrackingArea(self.trackingArea!) 
    } 
    let circleRect = self.bounds 
    let flag = NSTrackingAreaOptions.MouseEnteredAndExited.rawValue + NSTrackingAreaOptions.ActiveInActiveApp.rawValue 
    self.trackingArea = NSTrackingArea(rect: circleRect, options: NSTrackingAreaOptions(rawValue: flag), owner: self, userInfo: nil) 
    self.addTrackingArea(self.trackingArea) 
} 

override func mouseEntered(theEvent: NSEvent) { 
    self.hovered = true 
    NSCursor.pointingHandCursor().set() 
    self.needsDisplay = true 
} 

override func mouseExited(theEvent: NSEvent) { 
    self.hovered = false 
    NSCursor.arrowCursor().set() 
    self.needsDisplay = true 
} 

override func updateLayer() { 
    if(hovered){ 
     if (self.cell!.highlighted){ 
      self.layer?.backgroundColor = pressedBackgroundColor?.CGColor 
     } 
     else{ 
      self.layer?.backgroundColor = hoveredBackgroundColor?.CGColor 
     } 
    } 
    else{ 
     self.layer?.backgroundColor = backgroundColor?.CGColor 
    } 
} 

}

链接:https://github.com/fancymax/HoverButton