2.6 开关控件——UISwitch

UISwitch是UIKit框架中的一个十分小巧简洁的控件,用于一些简单的切换功能逻辑中,在很多Apple自行开发的应用中,这个控件的使用率也非常高。

2.6.1 创建一个开关控件

使用Xcode创建一个名为UISwitchTest的工程,在ViewController类的viewDidLoad方法中添加如下代码。

Swift语言版本:

            override func viewDidLoad() {
                super.viewDidLoad()
                let swi = UISwitch(frame: CGRect(x: 100, y: 100, width: 100, height: 40))
                swi.onTintColor = UIColor.green
                swi.tintColor = UIColor.red
                swi.thumbTintColor = UIColor.orange
                self.view.addSubview(swi)
            }

Objective-C语言版本:

        - (void)viewDidLoad {
            [super viewDidLoad];
            UISwitch * swi = [[UISwitch alloc]initWithFrame:CGRectMake(100, 100, 100, 40)];
            swi.onTintColor = [UIColor greenColor];
            swi.tintColor = [UIColor redColor];
            swi.thumbTintColor = [UIColor orangeColor];
            [self.view addSubview:swi];
        }

UISwitch的功能十分简单,因此可设置的属性十分有限,onTintColor属性用于设置控件开启状态的填充色,tintColor属性设置控件关闭状态的边界色,thumbTintColor属性设置开关按钮的颜色。运行工程,效果如图2-25和图2-26所示。

图2-25 关闭状态的UISwitch空间

图2-26 开启状态的UISwitch控件

2.6.2 为UISiwtch控件添加触发方法

UISwitch也属于用户交互控件,可以为其添加交互方法来处理某些开与关的逻辑。UISwitch继承于UIControl,继承于UIControl的类都可以通过addTarget方法进行触发方法的添加,代码如下。

Swift语言版本:

    swi.addTarget(self, action: #selector(changeColor), for: .touchUpInside)

Objective-C语言版本:

    [swi addTarget:self action:@selector(changeColor:) forControlEvents:UIControlEventValueChanged];

这里实现的触发方法使用带一个参数值的函数,系统传入的参数为UISwitch对象本身,方法实现代码如下。

Swift语言版本:

            func changeColor(swi:UISwitch) {
                if (swi.isOn) {
                  self.view.backgroundColor = UIColor.red;
                }else{
                  self.view.backgroundColor = UIColor.white;
                }
            }

Objective-C语言版本:

        -(void)changeColor:(UISwitch *)swi{
            if (swi.isOn) {
              self.view.backgroundColor = [UIColor redColor];
            }else{
              self.view.backgroundColor = [UIColor whiteColor];
            }
        }

UISwitch的isOn属性是一个布尔值,通过这个值可以判断UISwitch控件的开关状态,然后分别进行相应的操作即可,这里在切换UISwitch控件的开关状态时进行了当前视图背景颜色的转换。