2009-11-09 28 views

Trả lời

15

Thiết lập khu vực theo dõi cho chế độ xem với addTrackingArea (miễn là bạn đang sử dụng Leopard hoặc OS X mới hơn). Bạn sẽ nhận được các sự kiện khi nhập chuột và thoát chuột.

+0

bạn có thể vui lòng giải thích làm thế nào để làm điều này với mã (ít nhất là với một số ví dụ ...)? – mthama

1

điều gì đó bên dưới có thể là câu trả lời.

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 
    } 
} 

}

liên kết: https://github.com/fancymax/HoverButton

Các vấn đề liên quan