2012-08-24 1 views
6

Nella mia app, posso modificare il colore del controllo del segmento selezionato.Ma il colore è cambiato per un altro indice invece che per l'indice selezionato. Posso trovare qualsiasi errore nell'indice.Modifica il colore del controllo segmento selezionato

Aiutatemi!

il mio codice è il seguente:

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

è possibile applicare direttamente il colore in pennino. perché gestisci la codifica? – Hiren

+0

Voglio visualizzare colori diversi anziché blu e scuro. – piyush

risposta

8

mi consiglia di creare i due colori al di fuori della vostra condizione, rende il tuo codice un po 'più piccolo. Quindi è possibile utilizzare un foreach per iterare su segmenti:

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

Grazie mille amico ... – piyush

-1

ho provato la stampa subviews di controllo segmento su console e ho rilevato che gli indici sono in ordine inverso, significa che se selectedSegment è 0 quindi la sottoview dovrebbe essere 2 non 0.Prova a stampare il controllo del segmento su console e vedrai lo stesso risultato come segue sull'azione del segmento .:

NSArray *theArr = [mSegmentedControl subviews]; 
      DEBUGLOG(@"controls arr: %@",theArr); 

registri su console:

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

controlla questo uno

-(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]; 

    } 
} 
} 

Inoltre è possibile controllare più risposte qui UISegmentedControl selected segment color

0

Spero che si può semplicemente cambiare la tintColor di controllo dei segmenti. Funziona perfettamente per me.