2012-08-24 11 views
6

मेरे ऐप में, मैं चयनित सेगमेंट कंट्रोल का रंग बदल सकता हूं। लेकिन चयनित इंडेक्स के बजाय रंग किसी अन्य इंडेक्स के लिए बदल दिया गया है। मुझे इंडेक्स में कोई गलती मिल सकती है।चयनित सेगमेंट कंट्रोल का रंग बदलें

मेरी सहायता करें!

मेरे कोड इस प्रकार है:

if([SegmentRound selectedSegmentIndex] == 0) 
    { 

     UIColor *newSelectedTintColor2 = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:0] setTintColor:newSelectedTintColor2]; 

     UIColor *newSelectedTintColor1 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:1] setTintColor:newSelectedTintColor1]; 

     UIColor *newSelectedTintColor0 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:2] setTintColor:newSelectedTintColor0]; 



     FLAGROUND=1; 
    } 

    if([SegmentRound selectedSegmentIndex] == 1) 
    { 
     UIColor *newSelectedTintColor1 = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:1] setTintColor:newSelectedTintColor1]; 

     UIColor *newSelectedTintColor0 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:0] setTintColor:newSelectedTintColor0]; 

     UIColor *newSelectedTintColor2 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:2] setTintColor:newSelectedTintColor2]; 

     FLAGROUND=2; 
    } 
    if([SegmentRound selectedSegmentIndex] == 2) 
    { 
     UIColor *newSelectedTintColor0 = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:2] setTintColor:newSelectedTintColor0]; 

     UIColor *newSelectedTintColor2 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:0] setTintColor:newSelectedTintColor2]; 

     UIColor *newSelectedTintColor1 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 
     [[[SegmentRound subviews] objectAtIndex:1] setTintColor:newSelectedTintColor1]; 
     FLAGROUND=3; 
    } 

viewwillAppear:

[SegmentRound setSelectedSegmentIndex:0]; 
+0

आप सीधे निब फ़ाइल में रंग लागू कर सकते हैं। आप कोडिंग के माध्यम से क्यों प्रबंधन करते हैं? – Hiren

+0

मैं अंधेरे और नीले रंग के बजाय अलग रंग प्रदर्शित करना चाहता हूं। – piyush

उत्तर

8

मैं के बाहर दो रंग बनाने के लिए सलाह देते हैं जवाब आपके हालत, आपका कोड थोड़ा छोटा बनाता है। तो फिर आप अपने क्षेत्रों से अधिक पुनरावृति करने के लिए एक foreach का उपयोग कर सकते हैं:

UIColor *selectedColor = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; 
UIColor *deselectedColor = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; 

for (UIControl *subview in [SegmentRound subviews]) { 
    if ([subview isSelected]) 
     [subview setTintColor:selectedColor]; 
    else 
     [subview setTintColor:deselectedColor]; 
} 
+0

धन्यवाद बहुत आदमी ... – piyush

-1

मैं कंसोल पर खंड नियंत्रण के subviews मुद्रण की कोशिश की और मैं पाया है कि अनुक्रमित उलटे क्रम में कर रहे हैं, इसका मतलब है अगर selectedSegment 0 है तो आपका सबव्यू 2 नहीं होना चाहिए 0. कंसोल पर प्रिंटिंग सेगमेंट कंट्रोल का प्रयास करें और आप सेगमेंट एक्शन पर निम्न परिणाम देखेंगे:

NSArray *theArr = [mSegmentedControl subviews]; 
      DEBUGLOG(@"controls arr: %@",theArr); 
कंसोल पर

लॉग्स:

controls arr: (
    "<UISegment: 0x8598ad0; frame = (77 0; 76 34); opaque = NO; layer = <CALayer: 0x8598b30>>", 
    "<UISegment: 0x85986e0; frame = (0 0; 76 34); opaque = NO; layer = <CALayer: 0x8598740>>" 
) 
2

बाहर की जांच इस एक

-(IBAction)segmentBtnPressed:(UISegmentedControl*)sender{ 
for (int i=0; i<[sender.subviews count]; i++) 
{ 
    if ([[sender.subviews objectAtIndex:i]isSelected]) 
    {    
    UIColor *tintcolor=[UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; 
    [[sender.subviews objectAtIndex:i] setTintColor:tintcolor]; 
    } 
    else{ 
    UIColor *tintcolor=[UIColor colorWithRed:127.0/255.0 green:161.0/255.0 blue:183.0/255.0 alpha:1.0]; 
    [[sender.subviews objectAtIndex:i] setTintColor:tintcolor]; 

    } 
} 
} 

इसके अलावा, आप देख सकते हैं और अधिक यहाँ UISegmentedControl selected segment color

0

मुझे आशा है कि आप बस सेगमेंट कंट्रोल TintColor बदल सकते हैं। यह मेरे लिए पूरी तरह से काम करता है।

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