2014-09-02 9 views
6

Voglio cambiare il colore di onTintColor nell'UISwitch per lo stato off. L'interruttore è in tableview e l'interruttore è fatto a livello di codice.Come cambiare il colore predefinito di UISwitch per lo stato OFF?

[settingsSwitch setBackgroundColor:[UIColor whiteColor]]; 
    [settingsSwitch setTintColor:[UIColor whiteColor]]; 
    [settingsSwitch setThumbTintColor:[UIColor redColor]]; 
    [settingsSwitch setOnTintColor:[UIColor colorWithRed:138/256.0 green:9/256.0 blue:18/256.0 alpha:1]]; 

enter image description here

Questo è il risultato che ottengo quando ho impostato il colore di sfondo bianco.

enter image description here

E senza sfondo ottengo colore rosso che è il colore della mia cella.

enter image description here

e questo è il risultato che voglio, quando l'interruttore è sul onTintColor dovrebbe b rosso scuro, e in stato di fuori di esso dovrebbe essere bianca.

Ho provato modificando l'immagine sullo switch con questa riga di codice

[settingsSwitch setOnImage:[UIImage imageNamed:@"on.png"]]; 
[settingsSwitch setOffImage:[UIImage imageNamed:@"off.png"]]; 

Ma la sua non modificando le immagini. Voglio cambiare il colore dello switch in stato off. Spero di aver spiegato chiaramente la mia domanda. Grazie per avermi aiutato in anticipo.

+0

Non sono sicuro se questo è una buona idea. Sembra che l'interruttore on sia spento. E l'interruttore di spegnimento sembra che sia acceso. (Perché ha un colore brillante, bianco, dall'aspetto attivo). – Marc

+2

Sono d'accordo ma questo è il requisito del cliente. –

+0

@iOSDeveloper, il client ha sempre ragione :) –

risposta

7

È possibile utilizzare il seguente CODICE per soddisfare i requisiti.

tuo viewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Do any additional setup after loading the view, typically from a nib. 

    [self.view setBackgroundColor:[UIColor redColor]]; 

    settingsSwitch.layer.cornerRadius = 16.0; // you must import QuartzCore to do this 


    if (settingsSwitch.on) { 
     NSLog(@"If body "); 
     [settingsSwitch setThumbTintColor:[UIColor redColor]]; 

     [settingsSwitch setBackgroundColor:[UIColor whiteColor]]; 
     [settingsSwitch setOnTintColor:[UIColor whiteColor]]; 

    }else{ 
     NSLog(@"Else body "); 

     [settingsSwitch setTintColor:[UIColor clearColor]]; 

     [settingsSwitch setThumbTintColor:[UIColor redColor]]; 

     [settingsSwitch setBackgroundColor:[UIColor colorWithRed:138/256.0 green:9/256.0 blue:18/256.0 alpha:1]]; 
    } 
} 

Metodo in cui il cambiamento di stato IBAction si chiama.

- (IBAction)switchStatusChange:(UISwitch *)sender 
{ 
    if (sender.on) { 
     NSLog(@"If body "); 
     [sender setThumbTintColor:[UIColor redColor]]; 

     [sender setBackgroundColor:[UIColor whiteColor]]; 
     [sender setOnTintColor:[UIColor whiteColor]]; 

    }else{ 
     NSLog(@"Else body "); 

     [sender setTintColor:[UIColor clearColor]]; 

     [sender setThumbTintColor:[UIColor redColor]]; 

     [sender setBackgroundColor:[UIColor colorWithRed:138/256.0 green:9/256.0 blue:18/256.0 alpha:1]]; 
    } 
} 
+0

Questo funziona effettivamente, ma si avvita con l'animazione del pollice (a sinistra oa destra). Qualche soluzione alternativa? – Legoless

+0

come potremmo renderlo scorrevole –

3

È possibile utilizzare vi primo approccio + aggiungi raggio di frontiera per rimuovere spigoli indesiderati:

slider.backgroundColor = [UIColor whiteColor]; 
slider.layer.cornerRadius = 18.0; 

Originario di this risposta.

+0

cornerRadius influenzare nell'angolo del bordo, è una soluzione scadente –

Problemi correlati