UISwitch是一个开关控件,一般用在设置界面上的一些开关。由于这个控件的一些特性,在开发中并不能很好的满足设计需求,所以一般不常使用。
UISwitch创建
UISwitch是继承自UIControl的,是UIView的非直接子类,所以创建也是使用同样的方法。
//创建UISwitch,UISwitch的大小是固定的,所以在创建时可以不设置大小。
//注意,在创建UISwitch时不要以switch命名创建的对象,因为switch是OC的关键字。
UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(100, 300, 0, 0)];
UISwitch的属性
在UISwitch的头文件中可以看到这个控件的属性
@property(nullable, nonatomic, strong) UIColor *onTintColor NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
@property(null_resettable, nonatomic, strong) UIColor *tintColor NS_AVAILABLE_IOS(6_0);
@property(nullable, nonatomic, strong) UIColor *thumbTintColor NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;
@property(nullable, nonatomic, strong) UIImage *onImage NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;
@property(nullable, nonatomic, strong) UIImage *offImage NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;
@property(nonatomic,getter=isOn) BOOL on;
在实际的开发中我们会发现UISwitch的onImage属性和offImage属性是无效的,这里就不多做解释了。不信的可以自己去设置一下。
//定制开关颜色UI
//tintColor 关状态下的背景颜色
mySwitch.tintColor = [UIColor redColor];
//onTintColor 开状态下的背景颜色
mySwitch.onTintColor = [UIColor yellowColor];
//thumbTintColor 滑块的背景颜色
mySwitch.thumbTintColor = [UIColor blueColor];
// mySwitch.onImage = [UIImage imageNamed:@"on.png"]; //无效
// mySwitch.offImage = [UIImage imageNamed:@"off.png"]; //无效
//设置开关的背景颜色 设置后会发现开关是矩形的
mySwitch.backgroundColor = [UIColor yellowColor];
//判断开关的状态
if (mySwitch.on) {
NSLog(@"switch is on");
} else {
NSLog(@"switch is off");
}
UISwitch的方法
- (void)setOn:(BOOL)on animated:(BOOL)animated; // does not send action
除了创建方法,只有一个设置开关的方法。
// 设置开关状态(默认是 关) 这个方法等同于属性on的设置
// mySwitch.on = YES;
[mySwitch setOn:YES animated:true]; //animated
UISwitch事件监听
因为开关有控制交互,所以要有监听事件,和按钮一样,使用方法给开关添加一个监听。
//添加事件监听
[mySwitch addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventValueChanged];
上面代码的解释和按钮的监听事件一样,只是按钮一般ControlEvents是点击(UIControlEventTouchUpInside),开关是改变(UIControlEventValueChanged)。
总结
前面说到UISwitch的大小是不能设置的,只能通过缩放变形来改变展示的开关的大小。还有2个属性的无效,这就使得在开发中这个控件有很大的局限性,越是开放的东西应用才能越广泛。在一些设计中也会有一些开关,但是因为设计的多样性不能使用UISwitch。所以UIView的灵活运用就很重要,使用UIView也可以制作一个精美的开关。