2012-03-31 11 views
7

मैं NSSegmentedControl का उप-वर्ग होना चाहता हूं जहां विभिन्न सेगमेंट अलग-अलग रंग हैं।NSSegmentedControl रंग

- (void)drawRect:(NSRect)dirtyRect 
{ 
    NSColor *color = [NSColor redColor]; 
    [color setFill]; 
    NSRectFill(dirtyRect); 
    [super drawRect:dirtyRect]; 
} 

enter image description here

है कि 1. यह रंग पूरे नियंत्रण के आधार पर विभाजित एक ही रंग, इस मामले में लाल को छोड़कर करीब लग रहा है, और 2. वहाँ: मैं NSSegmentedControl उपवर्गीकरण और निम्नलिखित कोड जोड़ने की कोशिश की है किनारों पर थोड़ा सा रंग खून बह रहा था।

- (void)drawSegment:(NSInteger)segment inFrame:(NSRect)frame withView:(NSView *)controlView 
{ 
    NSColor *color; 
    switch (segment) { 
     case 0: 
      color = [NSColor redColor]; 
      break; 
     case 1: 
      color = [NSColor blueColor]; 
      break; 
     case 2: 
      color = [NSColor greenColor]; 
      break; 
     case 3: 
      color = [NSColor orangeColor]; 
      break; 
     default: 
      break; 
    } 
    [color setFill]; 
    NSRectFill(frame); 
    [super drawSegment:segment inFrame:frame withView:controlView]; 
} 

enter image description here

यह है कि में बेहतर है विभिन्न क्षेत्रों अद्वितीय रंग प्रदर्शित कर रहे हैं, हालांकि मैं शायद ही इस स्वीकार्य पर विचार करेंगे:

मैं भी NSSegmentedCell उपवर्गीकरण और इस जोड़ने की कोशिश की। मैं चाहता हूं कि पूरे सेगमेंट को उस सेगमेंट के उचित रंग के साथ भरना पड़े और यह अच्छा होगा अगर पहले स्क्रीनशॉट में ढाल और छायांकन हो।

कृपया मुझे बताएं कि मैं इसे कैसे प्राप्त कर सकता हूं।

धन्यवाद।

+0

तुम यह पता लगाना कि खंडित नियंत्रण का वर्तमान कार्यान्वयन इसकी ड्राइंग में पारदर्शिता का उपयोग करता है। इससे लाल रंग की अनुमति मिलती है कि आप नियंत्रण के नीचे चित्रित कर रहे हैं। यह मैक ओएस एक्स के किसी भी अपडेट के साथ बदल सकता है। इसे सही तरीके से करने के लिए, अपने स्वयं के NSView सबक्लास को बनाना चाहिए जो ड्रॉरेक्ट में सभी चित्रों को करता है: मौजूदा नियंत्रण को टेंट करने की कोशिश करने के बजाय। –

+0

ओह, जॉन, संभवतः आप जो कह रहे हैं उससे संबंधित हैं, वास्तव में लगभग आधे दर्जन विभिन्न शैलियों हैं। मुझे आश्चर्य है कि अन्य शैलियों इस पर भी असर डाल सकती हैं। –

उत्तर

4

आपको सेगमेंट के लिए निश्चित चौड़ाई निर्दिष्ट करने की आवश्यकता है।

enter image description here

फिर अपने कोड बहुत अच्छी (स्क्रीनशॉट अपने परीक्षण परियोजना से है)

enter image description here

काम करेंगे और भूल नहीं है टिंट निष्क्रिय करने के लिए

[self.segment.cell setControlTint:NSClearControlTint ]; 
संबंधित मुद्दे