UIButtonクラスを利用して、ボタンを作る方法を解説します。
UIButtonクラスのbuttonWithType:関数を利用してインスタンスを生成します。
+ ( id )buttonWithType:( UIButtonType )buttonType;
buttonType引数にボタンの種類を指定することで、色々なボタンを作成することができます。
ボタンの種類 | 通常状態 | 押下状態 |
---|---|---|
UIButtonType | ||
UIButtonType | ||
UIButtonType | ||
UIButtonType | ||
UIButtonType | ||
UIButtonType |
なお、ボタンを作成したあとで、ボタンの種類を変更することはできません。
setTitle:forState:関数を利用して、ボタンのラベル文字列を設定します。
title引数には表示するラベル文字列を指定します。
state引数には、ラベル文字列を表示するときのボタンの状態を指定します。
UIControlStateNormal | 通常状態 |
UIControlStateHighlighted | ボタンが押された状態 |
UIControlStateDisabled | 利用不可の状態 |
例えば以下のようにすると、通常状態とボタンが押された状態で表示するラベル文字列を切り替えることができます。
[ sampleButton setTitle:@"通常状態 ボタン" forState:UIControlStateNormal ];
[ sampleButton setTitle:@"押された ボタン" forState:UIControlStateHighlighted ];
UIControlStateHighlightedとUIControlStateDisabledを指定しない場合は、UIControlStateNormal(通常状態)のラベル文字列が利用されます。つまり、状態に応じたラベル文字列の変更を行わない場合は、UIControlStateNormalに対してのみsetTitle:forState:関数を呼び出せば良いです。
ラベル文字列は自動的に縦横中央に配置されます。ラベル文字列がボタンをはみ出る場合は、自動的に「...」で省略表記されます。
addTarget:action:forControlEvents:関数を利用して、ボタンがタップされた時の動作を定義します。
- ( void )addTarget:( id )target
action:( SEL )action
forControlEvents:( UIControlEvents )controlEvents
addTarget:action:forControlEvents:関数の公式リファレンス
target/action引数にはタップ時に呼び出されるインスタンス/関数を指定します。
controlEvents引数にはタップ操作に対応するUIControlEventTouchUpInsideを指定します。controlEvents引数に別の値を指定することで、異なるタイミングの動作を定義することもできます。例えばUIControlEventTouchDownを指定すると、タップではなくボタン押下直後の動作を定義できます。
- ( void )loadView {
[ super loadView ];
UIView * parentView = self.view;
parentView.backgroundColor = [ UIColor grayColor ];
// UIButtonインスタンスを生成する
UIButton * sampleButton = [ UIButton buttonWithType:UIButtonTypeRoundedRect ];
// ボタンの位置とサイズを指定する
sampleButton.frame = CGRectMake( 50, 50, 220, 40 );
// ボタンのラベル文字列を指定する
[ sampleButton setTitle:@"テスト ボタン" forState:UIControlStateNormal ];
// ボタンがタップされたときの動作を定義する
[ sampleButton addTarget:self
action:@selector( onTapButton: )
forControlEvents:UIControlEventTouchUpInside ];
// ボタンを画面に表示する
[ parentView addSubview:sampleButton ];
return;
}
- ( void )onTapButton:( id )sender {
NSLog( @"タップされたよ!" );
}