iOS-UISwitch開關(guān)基本使用

無(wú)論哪種客戶端或者網(wǎng)頁(yè),開關(guān)控件都是必備的,在Android中提供了Switch控件畜吊,而iOS則提供了UISwitch。日常開發(fā)中户矢,設(shè)計(jì)師一般都是按照iOS的設(shè)計(jì)風(fēng)格來(lái)設(shè)計(jì)玲献,所以安卓原生的Switch基本派不上用場(chǎng),基本都是自定義View來(lái)實(shí)現(xiàn)。iOS客戶端則可以直接用UISwitch捌年。

UISwitch默認(rèn)樣式.png

創(chuàng)建開關(guān)

UISwitch通過(guò)alloc和init就可以創(chuàng)建了瓢娜,注意要顯示必須設(shè)置按鈕的frame,否則不會(huì)顯示礼预,而且UISwitch的寬恋腕、高都不能修改,就算設(shè)置了也沒(méi)效果逆瑞。

@interface ViewController ()

@property(nonatomic, strong) UISwitch *pushSwitch;

@end

@implementation ViewController

/**
 * 懶加載按鈕開關(guān)
 */
- (UISwitch *)pushSwitch {
    if (_pushSwitch == nil) {
        _pushSwitch = [[UISwitch alloc] init];
        //位置的x,y可以改荠藤,但是按鈕寬、高不可以改获高,就算設(shè)置了也沒(méi)效果
        _pushSwitch.frame = CGRectMake(100, 200, 80, 40);
        //設(shè)置按鈕在屏幕中心
        _pushSwitch.center = CGPointMake(self.view.center.x, self.view.center.y);
    }
    return _pushSwitch;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    //將開關(guān)添加到控制器的View
    [self.view addSubview:self.pushSwitch];
}

@end

設(shè)置樣式

默認(rèn)開關(guān)樣式:

  • 開:綠色背景哈肖,白色圓形滑塊。
  • 關(guān):透明背景念秧,白色圓形滑塊淤井。

除了默認(rèn)樣式,蘋果爸爸還我我們提供了以下Api設(shè)置一些按鈕的樣式

  1. 設(shè)置開關(guān)-開時(shí)的背景顏色
UISwitch設(shè)置開樣式.png
//設(shè)置開時(shí)的背景為橙色摊趾,默認(rèn)綠色
[self.pushSwitch setOnTintColor: [UIColor orangeColor]];
  1. 設(shè)置圓形滑塊的顏色
UISwitch設(shè)置滑塊顏色.png
//設(shè)置圓形滑塊的顏色為綠色币狠,開關(guān)的開和關(guān)時(shí)都為這種顏色,默認(rèn)為白色
[self.pushSwitch setThumbTintColor: [UIColor greenColor]];
  1. 設(shè)置按鈕關(guān)閉時(shí)的邊框顏色
UISwitch設(shè)置關(guān)閉時(shí)的邊框顏色.png
//按鈕關(guān)閉時(shí)的邊框顏色為紫色砾层,只在按鈕關(guān)閉時(shí)邊框的顏色漩绵,按鈕背景為透明,不能被修改
[self.pushSwitch setTintColor:[UIColor purpleColor]];

基本使用

  • 手動(dòng)設(shè)置按鈕的開肛炮、關(guān)止吐,分為帶動(dòng)畫和不帶動(dòng)畫2種
//設(shè)置開關(guān)狀態(tài),不帶動(dòng)畫
self.pushSwitch.on = YES;
//設(shè)置開關(guān)狀態(tài)侨糟,帶動(dòng)畫
[self.pushSwitch setOn:YES animated:YES];
  • 設(shè)置按鈕切換事件回調(diào)監(jiān)聽
//設(shè)置開關(guān)切換事件
- (void)viewDidLoad {
    [super viewDidLoad];
    //將開關(guān)添加到控制器的View
    [self.view addSubview:self.pushSwitch];
    //設(shè)置開關(guān)切換事件
    [self.pushSwitch addTarget:self action:@selector(switchChange:) forControlEvents:UIControlEventValueChanged];
}

/**
 * 按鈕切換事件監(jiān)聽回調(diào)方法
 */
- (void) switchChange:(UISwitch*)sw {
    if(sw.on == YES) {
        NSLog(@"開關(guān)切換為開");
    } else if(sw.on == NO) {
        NSLog(@"開關(guān)切換為關(guān)");
    }
}

示例

例如設(shè)置頁(yè)面的推送開關(guān)碍扔,每次開關(guān)記錄到本地,每次頁(yè)面進(jìn)入時(shí)回顯之前設(shè)置的開關(guān)狀態(tài)秕重。本地保存方式有很多種不同,我們這里選用簡(jiǎn)單的NSUserDefaults來(lái)保存即可。

@interface ViewController ()

@property(nonatomic, strong) UISwitch *pushSwitch;

@end

/**
 * 推送開關(guān)本地存儲(chǔ)標(biāo)識(shí)Key
 */
static NSString* const SWITCH_KEY = @"PUSH_IS_OPEN";

@implementation ViewController

//省略上面提到的按鈕創(chuàng)建和初始化...

- (void)viewDidLoad {
    [super viewDidLoad];
    //...省略事件監(jiān)聽設(shè)置
    
    //使用NSUserDefaults溶耘,回顯之前的開關(guān)配置
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    //設(shè)置開關(guān)狀態(tài)二拐,不帶動(dòng)畫
    self.pushSwitch.on = [defaults objectForKey:SWITCH_KEY];
}

- (void) switchChange:(UISwitch*)sw {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if(sw.on == YES) {
        NSLog(@"開關(guān)切換為開");
    } else if(sw.on == NO) {
        NSLog(@"開關(guān)切換為關(guān)");
    }
    [defaults setBool:sw.on forKey:SWITCH_KEY];
}

@end
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市汰具,隨后出現(xiàn)的幾起案子卓鹿,更是在濱河造成了極大的恐慌,老刑警劉巖留荔,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吟孙,死亡現(xiàn)場(chǎng)離奇詭異澜倦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)杰妓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門藻治,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人巷挥,你說(shuō)我怎么就攤上這事桩卵。” “怎么了倍宾?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵雏节,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我高职,道長(zhǎng)钩乍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任怔锌,我火速辦了婚禮寥粹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘埃元。我一直安慰自己涝涤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布岛杀。 她就那樣靜靜地躺著阔拳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪楞件。 梳的紋絲不亂的頭發(fā)上衫生,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天裳瘪,我揣著相機(jī)與錄音土浸,去河邊找鬼。 笑死彭羹,一個(gè)胖子當(dāng)著我的面吹牛黄伊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播派殷,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼还最,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了毡惜?” 一聲冷哼從身側(cè)響起拓轻,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎经伙,沒(méi)想到半個(gè)月后扶叉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年枣氧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溢十。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡达吞,死狀恐怖张弛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酪劫,我是刑警寧澤吞鸭,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站覆糟,受9級(jí)特大地震影響瞒大,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搪桂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一透敌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧踢械,春花似錦酗电、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至话瞧,卻和暖如春嫩与,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背交排。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工划滋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埃篓。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓处坪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親架专。 傳聞我的和親對(duì)象是個(gè)殘疾皇子同窘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容