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 を切り替える。
似たようなことするライブラリみたいなのもあるけど、この方法で簡単にスイッチが作れると思う。