UISwitchでスイッチコントロールを作る

UISwitchを利用して、スイッチコントールを作る方法を解説します。

サンプルコードの実行例

概要

スイッチコントールは以下の手順で作成します。

  1. alloc関数とinit関数でUISwitchクラスのインスタンスを生成する
  2. onプロパティでオン/オフ状態を指定する
  3. UIControlEventValueChangedイベントを利用して、オン/オフ切り替え時の動作を実装する
  4. setOn:animated:関数を利用して、オン/オフ状態を切り替える

インスタンスを生成する

alloc関数とinit関数を利用してUISwitchクラスのインスタンスを生成します。

UISwitch * switch1 = [ [ [ UISwitch alloc ] init ] autorelease ];
switch1.frame = CGRectMake( 40, 50, 1, 1 );

スイッチコントールのサイズは以下のように固定となります。

  • iOS4以下:横:94 / 縦:27
  • iOS5以降:横:79 / 縦:27

frame/boundsプロパティやinitWithFrame:関数を利用してコントールの位置/サイズを指定しても、サイズ情報は無視され、位置のみ変更できます。

オン/オフ状態を指定する

onプロパティでスイッチコントロールのオン/オフ状態を変更します。

クラス
UISwitch
プロパティ
on
利用例
switch1.on = YES;

onプロパティの公式リファレンス

setOn:animated関数を利用すると、オン/オフ状態をアニメーション付きで切り替えることができます。onプロパティを利用するとアニメーションは付きません。

クラス
UISwitch
関数
setOn:animated:
利用例
[ m_objSwitch2 setOn:YES animated:YES ];

setOn:animated:関数の公式リファレンス

その他

スイッチコントロールに表示されるテキストを変更することはできません。

スイッチコントロールは、以下の2通りの操作でオン/オフ状態を切り替えることができます。

  • コントロールをタップする
  • コントロールをスワイプする

サンプルコード

- ( void )loadView
{
	[ super loadView ];
	
	UIView * parentView = self.view;
	
	parentView.backgroundColor = [ UIColor grayColor ];

	// UISwichを生成
	UISwitch * switch1 = [ [ [ UISwitch alloc ] init ] autorelease ];
	
	// 表示位置を指定。縦横サイズは無視される(94/27で固定)
	switch1.frame = CGRectMake( 40, 50, 1, 1 );
	
	// 初期値を指定する
	switch1.on = YES;
	
	// ON/OFF切り替え時に呼びされる関数を指定する
	[ switch1 addTarget:self action:@selector( onChangeSwitch: ) forControlEvents:UIControlEventValueChanged ];
	
	// 親Viewに登録する
	[ parentView addSubview:switch1 ];
	
	m_objSwitch1 = [ switch1 retain ];
	
	// 連動するUISwitchを作成する
	UISwitch * switch2 = [ [ [ UISwitch alloc ] init ] autorelease ];
	switch2.on = NO;
	switch2.frame = CGRectMake( 186, 50, 1, 1 );
	[ parentView addSubview:switch2 ];
	
	m_objSwitch2 = [ switch2 retain ];
	
	return;
}

- ( void )onChangeSwitch:( id )sender
{
	NSLog( @"UISwitchの値が変更されたよ!" );
	
	[ m_objSwitch2 setOn:!m_objSwitch1.on animated:YES ];
	
	return;
}

関連する記事