1. 程式人生 > IOS開發 >iOS UISwitch開關基本使用

iOS UISwitch開關基本使用

無論哪種客戶端或者網頁,開關控制元件都是必備的,在Android中提供了Switch控制元件,而iOS則提供了UISwitch。日常開發中,設計師一般都是按照iOS的設計風格來設計,所以安卓原生的Switch基本派不上用場,基本都是自定義View來實現。iOS客戶端則可以直接用UISwitch。

UISwitch預設樣式.png

建立開關

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設定一些按鈕的樣式

  1. 設定開關-開時的背景顏色

UISwitch設定開樣式.png

//設定開時的背景為橙色,預設綠色
[self.pushSwitch setOnTintColor: [UIColor orangeColor]];
複製程式碼
  1. 設定圓形滑塊的顏色

UISwitch設定滑塊顏色.png

//設定圓形滑塊的顏色為綠色,開關的開和關時都為這種顏色,預設為白色
[self.pushSwitch setThumbTintColor: [UIColor greenColor]];
複製程式碼
  1. 設定按鈕關閉時的邊框顏色

UISwitch設定關閉時的邊框顏色.png

//按鈕關閉時的邊框顏色為紫色,只在按鈕關閉時邊框的顏色,按鈕背景為透明,不能被修改
[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
複製程式碼