2011-08-05 14 views
6

हाइलाइट करना मैं अपने आवेदन के लिए एक कस्टम स्विच बनाना चाहता हूं, जिसमें मैं संभावित राज्यों (ऑन, ऑफ, मूसडाउन) के लिए तीन छवियां प्रदान करता हूं। पूरी उपस्थिति छवियों में निहित है, इसलिए मैं नहीं चाहता कि कोको को मूसडाउन के दौरान बटन को हाइलाइट करना (अंधेरा) करना है।छवियों के साथ एक NSButtonCell को अनुकूलित करना और

फिलहाल, मैंने एक NSButtonCell सबक्लास बनाया है, मेरे दृश्य में NSButtonTypeMomentaryChange का एक बेवल बटन खींच लिया है और कस्टम बटन बटन क्लास प्रकार को मेरे सबक्लास में सेट किया है।

- (void)awakeFromNib 
{ 
    [self setShowsStateBy:NSContentsCellMask]; 
    [self setHighlightsBy:NSContentsCellMask]; 
} 

जो मैंने सोचा था कि (प्रलेखन के अनुसार) बटन के mousedown-काला को निष्क्रिय होगा: उपवर्ग सिर्फ awakeFromNib कोशिश करते हैं और कुछ वांछित व्यवहार सेट करने के लिए लागू करता है। ऐसा नहीं होता।

यह वह जगह है जहाँ मैं खड़ा है और अब मैं दो प्रश्न हैं:

  • मैं ButtonCell वर्ग सिर्फ mousedown पर मेरे तैयार तस्वीर दिखाने के लिए सेट कर सकते हैं और काला कर नहीं है/बटन के आसपास सीमाओं आकर्षित?
  • स्विच के दूसरे व्यवहार को लागू करने के लिए सबसे साफ/सबसे उचित तरीका क्या होगा, यानी पिछले राज्य के आधार पर ऑफ/ऑन स्थिति दिखा रहा है और अन्य राज्यों के लिए अपने राज्य को सही तरीके से संवाद करने में सक्षम है?

उत्तर

5

अपने बटन का प्रकार चालू/बंद पर सेट करें। अपने सेल subclass। इन दो विधियों को लिखें:

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 
{ 
    if ([self state]) 
    { 
     [onStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; 
    } 
    else 
    { 
     [offStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; 
    } 
} 
- (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView *)controlView 
{ 
    if (flag){ 
     [downStateImage drawInRect:cellFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; 

    } 
} 
+0

यही है, धन्यवाद। – mss

संबंधित मुद्दे