iOS : UIButtonでボタンを作る

UIButtonクラスを利用して、ボタンを作る方法を解説します。

サンプルコードの実行例

ボタン作成の概要

  1. UIButtonインスタンスを生成する(buttonWithType:関数)
  2. ボタンの位置とサイズを指定する(frameプロパティ)
  3. ボタンのラベル文字列を設定する(setTitle:forState:関数)
  4. ボタンがタップされた時の動作を定義する(addTarget:action:forControlEvents:関数)
  5. ボタンを画面に表示する(親ViewのaddSubview関数)

UIButtonインスタンスを生成する

UIButtonクラスのbuttonWithType:関数を利用してインスタンスを生成します。

クラス
UIButton
関数
+ ( id )buttonWithType:( UIButtonType )buttonType;

buttonWithType関数の公式リファレンス

buttonType引数にボタンの種類を指定することで、色々なボタンを作成することができます。

ボタンの種類通常状態押下状態
UIButtonTypeCustomUIButtonTypeCustomの通常状態UIButtonTypeCustomの押下状態
UIButtonTypeRoundedRectUIButtonTypeRoundedRectの通常状態UIButtonTypeRoundedRectの押下状態
UIButtonTypeDetailDisclosureUIButtonTypeDetailDisclosureの通常状態UIButtonTypeDetailDisclosureの押下状態
UIButtonTypeInfoLightUIButtonTypeInfoLightの通常状態UIButtonTypeInfoLightの押下状態
UIButtonTypeInfoDarkUIButtonTypeInfoDarkの通常状態UIButtonTypeInfoDarkの押下状態
UIButtonTypeContactAddUIButtonTypeContactAddの通常状態UIButtonTypeContactAddの押下状態

UIButtonType列挙型の公式リファレンス

なお、ボタンを作成したあとで、ボタンの種類を変更することはできません。

ボタンのラベル文字列を設定する

setTitle:forState:関数を利用して、ボタンのラベル文字列を設定します。

クラス
UIButton
関数
- ( void )setTitle:( NSString* )title forState:( UIControlState )state

setTitle:forState:関数の公式リファレンス

title引数には表示するラベル文字列を指定します。

state引数には、ラベル文字列を表示するときのボタンの状態を指定します。

UIControlStateNormal通常状態
UIControlStateHighlightedボタンが押された状態
UIControlStateDisabled利用不可の状態

Control State列挙型の公式リファレンス

例えば以下のようにすると、通常状態とボタンが押された状態で表示するラベル文字列を切り替えることができます。

[ sampleButton setTitle:@"通常状態 ボタン" forState:UIControlStateNormal ];
[ sampleButton setTitle:@"押された ボタン" forState:UIControlStateHighlighted ];

UIControlStateHighlightedとUIControlStateDisabledを指定しない場合は、UIControlStateNormal(通常状態)のラベル文字列が利用されます。つまり、状態に応じたラベル文字列の変更を行わない場合は、UIControlStateNormalに対してのみsetTitle:forState:関数を呼び出せば良いです。

ラベル文字列は自動的に縦横中央に配置されます。ラベル文字列がボタンをはみ出る場合は、自動的に「...」で省略表記されます。

ラベル文字列の省略例

ボタンがタップされた時の動作を定義する

addTarget:action:forControlEvents:関数を利用して、ボタンがタップされた時の動作を定義します。

クラス
UIControl
関数
- ( void )addTarget:( id )target
        action:( SEL )action
        forControlEvents:( UIControlEvents )controlEvents

addTarget:action:forControlEvents:関数の公式リファレンス

target/action引数にはタップ時に呼び出されるインスタンス/関数を指定します。

controlEvents引数にはタップ操作に対応するUIControlEventTouchUpInsideを指定します。controlEvents引数に別の値を指定することで、異なるタイミングの動作を定義することもできます。例えばUIControlEventTouchDownを指定すると、タップではなくボタン押下直後の動作を定義できます。

Control Events列挙型の公式リファレンス

サンプルコード:UIButtonSample001ViewController.m

- ( 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( @"タップされたよ!" );
}

関連する記事