41
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOSAdvent Calendar 2012

Day 16

ON/OFF 切り替えスイッチを簡単に実装する

Posted at

iOS アプリ開発で ON/OFF 切り替えスイッチを作成したいときがある。そういうときは UISwitch を使うのが標準的な方法なんだけど、文言は変更できないし画像も設定できないので、たいてい役に立たない。

なので画像や文言を設定できる ON/OFF 切り替えスイッチを UIButton で実装してみた。

スイッチの宣言、配置はこんな感じ。

UIButton* mySwitch = [UIButton buttonWithType:UIButtonTypeCustom];

// OFFの画像設定
[mySwitch setBackgroundImage:[UIImage imageNamed:@"btn_off" forState:UIControlStateNormal];
// OFFでボタンをタップ中の画像設定
[mySwitch setBackgroundImage:[UIImage imageNamed:@"btn_off" forState:UIControlStateHighlighted];
// ONの画像設定
[mySwitch setBackgroundImage:[UIImage imageNamed:@"btn_on" forState:UIControlStateNormal | UIControlStateSelected];
// ONでボタンをタップ中の画像設定
[mySwitch setBackgroundImage:[UIImage imageNamed:@"btn_off" forState:UIControlStateHighlighted | UIControlStateSelected];

[mySwitch addTarget:self action:@selector(mySwitchDidTap:) forControlEvents:UIControlEventTouchDown];

// 適当に配置
mySwitch.frame = CGRectMake(10, 10, 100, 44);
[self.viwe addSubView:mySwitch];

これは背景画像を設定する例で、 forState:UIControlStateNormal | UIControlStateSelected のように指定するのがポイント。

タイトル文言を設定したいときは [mySwitch setTitle:@"ON" forState:UIControlStateNormal | UIControlStateSelected] のように指定すればOK。

ボタンをタップしたときの処理はこんな感じ。

-(void)mySwitchDidTap:(UIButton *)sender
{
  sender.selected = !sender.selected;
  if (sender.selected) {
    // ON に変わった場合
    // 何か処理...
  } else {
    // OFF に変わった場合
    // 何か処理...
  }
}

selected プロパティを使って ON/OFF を切り替える。

似たようなことするライブラリみたいなのもあるけど、この方法で簡単にスイッチが作れると思う。

41
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?