2014-09-02 9 views
6

Ich möchte die Farbe von onTintColor im UISwitch für den Aus-Zustand ändern. Der Schalter befindet sich in der Tabellenansicht und der Schalter wird programmgesteuert ausgeführt.Wie ändert man die UISwitch-Standardfarbe für den OFF-Zustand?

[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

Dies ist das Ergebnis bekomme ich, wenn ich die weiße Hintergrundfarbe gesetzt.

enter image description here

Und ohne Hintergrund i rote Farbe erhalten, die die Farbe meiner Zelle ist.

enter image description here

und das ist das Ergebnis ich will, wenn der Schalter ist auf dem onTintColor rot dunkel b sollte, und im ausgeschalteten Zustand sollte weiß sein.

Ich habe versucht, das Bild auf dem Schalter mit dieser Codezeile Einstellung

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

Aber es ist nicht die Bilder zu verändern. Ich möchte die Farbe des Schalters im ausgeschalteten Zustand ändern. Hoffe, ich habe meine Frage klar erklärt. Danke für die Hilfe im Voraus.

+0

Nicht sicher, ob das eine gute Idee ist. Es sieht so aus, als wäre der Ein-Schalter ausgeschaltet. Und der Aus-Schalter sieht aus wie es ist. (Weil es eine helle, weiße, aktiv aussehende Farbe hat). – Marc

+2

Ich stimme zu, aber das ist die Anforderung des Kunden. –

+0

@iOSDeveloper, Client hat immer Recht :) –

Antwort

7

Sie können folgenden CODE verwenden, um die Anforderung zu erfüllen.

Ihre 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]]; 
    } 
} 

Verfahren, mit dem Statusänderung IBAction aufgerufen wird.

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

Grenze zu geben Dies funktioniert tatsächlich, aber es schraubt mit der Daumen-Animation (nach links oder rechts). Irgendwelche Problemumgehungen? – Legoless

+0

wie könnten wir es glatt machen –

3

Sie können Ihnen ersten Ansatz verwenden + Grenzradius hinzufügen unerwünschte Ecken zu entfernen:

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

Ursprünglich aus this Antwort.

+0

cornerRadius beeinflussen in der Grenzecke, es ist eine schlechte Lösung –

Verwandte Themen