2014-09-02 16 views
6

Tôi muốn thay đổi màu của onTintColor trong UISwitch cho trạng thái tắt. Việc chuyển đổi là trong tableview và chuyển đổi được thực hiện theo chương trình.Làm thế nào để thay đổi màu mặc định UISwitch cho trạng thái TẮT?

[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

Đây là kết quả tôi nhận được khi tôi đặt màu nền trắng.

enter image description here

Và không có nền tôi nhận được màu đỏ là màu của ô.

enter image description here

và đây là kết quả tôi muốn, khi chuyển đổi là trên onTintColor nên b màu đỏ sẫm, và trong trạng thái tắt nó nên có màu trắng.

tôi đã cố gắng thiết lập các hình ảnh trên switch với dòng mã này

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

Nhưng nó không làm thay đổi hình ảnh. tôi muốn thay đổi màu của công tắc ở trạng thái tắt. Hy vọng tôi đã giải thích rõ ràng câu hỏi của tôi. Cảm ơn bạn đã trợ giúp trước.

+0

Không chắc đó có phải là ý hay không. Có vẻ như công tắc bật tắt. Và công tắc tắt trông giống như đang bật. (Bởi vì nó có màu sáng, trắng, năng động). – Marc

+2

Tôi đồng ý nhưng đó là yêu cầu của khách hàng. –

+0

@iOSDeveloper, Khách hàng luôn đúng :) –

Trả lời

7

Bạn có thể sử dụng CODE sau để đáp ứng yêu cầu.

viewDidLoad của bạn

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

Phương pháp nơi thay đổi trạng thái IBAction được gọi.

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

Điều này thực sự hoạt động, nhưng nó có hình động bằng ngón tay cái (sang trái hoặc sang phải). Bất kỳ cách giải quyết nào? – Legoless

+0

làm thế nào chúng ta có thể làm cho nó trơn tru –

3

Bạn có thể sử dụng cách tiếp cận bạn đầu tiên + thêm bán kính biên giới để loại bỏ các góc không mong muốn:

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

Nguyên từ this câu trả lời.

+0

cornerRadius ảnh hưởng ở góc biên giới, một giải pháp kém của nó –

Các vấn đề liên quan