iOS UISwitch開關基本使用
阿新 • • 發佈:2020-06-24
無論哪種客戶端或者網頁,開關控制元件都是必備的,在Android中提供了Switch控制元件,而iOS則提供了UISwitch。日常開發中,設計師一般都是按照iOS的設計風格來設計,所以安卓原生的Switch基本派不上用場,基本都是自定義View來實現。iOS客戶端則可以直接用UISwitch。
建立開關
UISwitch通過alloc和init就可以建立了,注意要顯示必須設定按鈕的frame,否則不會顯示,而且UISwitch的寬、高都不能修改,就算設定了也沒效果。
@interface ViewController ()
@property(nonatomic,strong) UISwitch *pushSwitch;
@end
@implementation ViewController
/**
* 懶載入按鈕開關
*/
- (UISwitch *)pushSwitch {
if (_pushSwitch == nil) {
_pushSwitch = [[UISwitch alloc] init];
//位置的x,y可以改,但是按鈕寬、高不可以改,就算設定了也沒效果
_pushSwitch.frame = CGRectMake(100,200,80,40);
//設定按鈕在螢幕中心
_pushSwitch.center = CGPointMake(self.view.center.x,self.view.center.y);
}
return _pushSwitch;
}
- (void)viewDidLoad {
[super viewDidLoad];
//將開關新增到控制器的View
[self.view addSubview:self.pushSwitch];
}
@end
複製程式碼
設定樣式
預設開關樣式:
- 開:綠色背景,白色圓形滑塊。
- 關:透明背景,白色圓形滑塊。
除了預設樣式,蘋果爸爸還我我們提供了以下Api設定一些按鈕的樣式
- 設定開關-開時的背景顏色
//設定開時的背景為橙色,預設綠色
[self.pushSwitch setOnTintColor: [UIColor orangeColor]];
複製程式碼
- 設定圓形滑塊的顏色
//設定圓形滑塊的顏色為綠色,開關的開和關時都為這種顏色,預設為白色
[self.pushSwitch setThumbTintColor: [UIColor greenColor]];
複製程式碼
- 設定按鈕關閉時的邊框顏色
//按鈕關閉時的邊框顏色為紫色,只在按鈕關閉時邊框的顏色,按鈕背景為透明,不能被修改
[self.pushSwitch setTintColor:[UIColor purpleColor]];
複製程式碼
基本使用
- 手動設定按鈕的開、關,分為帶動畫和不帶動畫2種
//設定開關狀態,不帶動畫
self.pushSwitch.on = YES;
//設定開關狀態,帶動畫
[self.pushSwitch setOn:YES animated:YES];
複製程式碼
- 設定按鈕切換事件回撥監聽
//設定開關切換事件
- (void)viewDidLoad {
[super viewDidLoad];
//將開關新增到控制器的View
[self.view addSubview:self.pushSwitch];
//設定開關切換事件
[self.pushSwitch addTarget:self action:@selector(switchChange:) forControlEvents:UIControlEventValueChanged];
}
/**
* 按鈕切換事件監聽回撥方法
*/
- (void) switchChange:(UISwitch*)sw {
if(sw.on == YES) {
NSLog(@"開關切換為開");
} else if(sw.on == NO) {
NSLog(@"開關切換為關");
}
}
複製程式碼
示例
例如設定頁面的推送開關,每次開關記錄到本地,每次頁面進入時回顯之前設定的開關狀態。本地儲存方式有很多種,我們這裡選用簡單的NSUserDefaults來儲存即可。
@interface ViewController ()
@property(nonatomic,strong) UISwitch *pushSwitch;
@end
/**
* 推送開關本地儲存標識Key
*/
static NSString* const SWITCH_KEY = @"PUSH_IS_OPEN";
@implementation ViewController
//省略上面提到的按鈕建立和初始化...
- (void)viewDidLoad {
[super viewDidLoad];
//...省略事件監聽設定
//使用NSUserDefaults,回顯之前的開關配置
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//設定開關狀態,不帶動畫
self.pushSwitch.on = [defaults objectForKey:SWITCH_KEY];
}
- (void) switchChange:(UISwitch*)sw {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if(sw.on == YES) {
NSLog(@"開關切換為開");
} else if(sw.on == NO) {
NSLog(@"開關切換為關");
}
[defaults setBool:sw.on forKey:SWITCH_KEY];
}
@end
複製程式碼