【问题标题】:How to change UISwitch default color for OFF state?如何更改关闭状态的 UISwitch 默认颜色?
【发布时间】:2014-10-26 08:03:18
【问题描述】:

我想在关闭状态的 UISwitch 中更改 onTintColor 的颜色。开关在 tableview 中,开关是通过编程方式进行的。

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

这是我将背景颜色设置为白色时得到的结果。

如果没有背景,我会得到红色,这是我的单元格的颜色。

这是我想要的结果,当开关打开时,onTintColor 应该是深红色,在关闭状态下应该是白色。

我尝试用这行代码设置开关上的图像

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

但它不会改变图像。 我想在关闭状态下更改开关的颜色。 希望我已经清楚地解释了我的问题。感谢您提前提供帮助。

【问题讨论】:

  • 不确定这是否是个好主意。好像on开关关了。关闭开关看起来像是打开的。 (因为它具有明亮、白色、活跃的颜色)。
  • 我同意,但这是客户的要求。
  • @iOSDeveloper,客户永远是对的 :)
  • 是否可以给开关加边框

标签: ios uiswitch tintcolor


【解决方案1】:

您可以使用以下代码来满足要求。

您的 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]];
    }
}

调用状态改变IBAction的方法。

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

【讨论】:

  • 这确实有效,但它与拇指动画(向左或向右)搞砸了。有什么解决方法吗?
  • 我们怎样才能让它顺利
  • 它可以工作,但不能提供流畅的动画。有什么办法可以解决这个问题?老兄。
  • @MRizwan33 尝试包装在调度队列主异步
  • @NabeelAhmed 好棒!是的,总是在主线程上更新 UI。用户不必处理无响应的界面。
【解决方案2】:

您可以使用您的第一种方法 + 添加边框半径来移除不需要的角落:

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

最初来自this的回答。

【讨论】:

  • cornerRadius 影响边界角,这是一个糟糕的解决方案
【解决方案3】:

UISwitch 中的角落切掉了视图,并没有看到圆形,最好的答案在这里https://stackoverflow.com/a/38564168/6609238

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 2012-01-26
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 2014-08-31
    • 2016-02-05
    相关资源
    最近更新 更多