2009-11-09 5 views
7

पर माउस के साथ प्रकाश डाला जाएगा क्या कोई ध्वज सेट किया जा सकता है जो कोको बटन को हाइलाइट होने पर हाइलाइट किया जाएगा। मुझे ओएसएक्स पर उद्देश्य सी के साथ प्रोग्रामेटिक रूप से इसकी आवश्यकता है।कोको बटन जो

उत्तर

15

addTrackingArea के साथ दृश्य के लिए एक ट्रैकिंग क्षेत्र सेटअप करें (बशर्ते आप तेंदुए या नए ओएस एक्स का उपयोग कर रहे हों)। आपको माउस एंटर और माउस से बाहर निकलने पर ईवेंट मिलेंगे।

+0

आप कृपया कैसे (कम से कम कुछ उदाहरण के साथ ...) कोड के साथ ऐसा करने का तरीका कर सकते हैं? – mthama

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