UIButtonをIB使わずに作成する

たくさんのボタンを作成したり、細かい設定をしたりする場合、IBで作成するよりもコードでUIButtonオブジェクトを生成させた方が楽な場合も多いです。今回それを使う機会があったので、メモとして残しておきます。

UIButtonの生成

手順としてはボタンを作るメソッド(最初から作っておく場合にはviewDidLoad)でUIButtonオブジェクトを作って、あるビューのサブビューに追加すればボタンの生成が完了します。

UIButton *button = [UIButton buttonWithType: UIButtonTypeRoundedRect];
//ここにボタンの設定を記述する
[self.view addSubview:button];

UIButtonの設定

上の「//ここにボタンの設定を記述する」の部分にボタンの設定を書きます。

枠を設定する

下の行を加えることでボタンのサイズと座標を設定することができます。

button.frame = CGRectMake(x座標,y座標,幅,高さ);

文字を設定する

下の行を加えることでボタンに表示される文字(title)を設定できます。

[button setTitle:@"Button" forState:UIControlStateNormal];

タップイベントを設定する

下の行を加えることによって@selectorの()の中がメソッド名となり、タップされるとこのメソッドが実行されます。forControlEventsはイベントの発生条件で、ここでは普通にタップしたときになってます。

[button addTarget:self action:@selector(tapButton:) forControlEvents:UIControlEventTouchUpInside];

これに加えて下のようなメソッドを作る必要があります。

(void)tapButton:(id)sender
{
//タップ時の動作
}

個別に設定するのが面倒くさい場合は、UIButtonオブジェクトのコンストラクタ(上でいうbuttonWithType)を別のものにすることで宣言時に設定することも可能です。

複数ボタンをまとめて作成するときのやり方

下のような関数を作成することによって各ボタンについて下の関数にtagとframeとtitleを渡してあげることで関数で定義されたようなボタンが返されます。

(UIButton *)createButton:(NSString*)title tag:(int)tag frame:(CGRect)frame
{
UIButton *button = [UIButton buttonWithType: UIButtonTypeRoundedRect];
button.frame = frame;
button.tag = tag;
[button setTitle:title forState:UIControlStateNormal];
[[button titleLabel] setFont:[UIFont systemFontOfSize:20.0f]];
[button addTarget:self action:@selector(tapButton:) forControlEvents:UIControlEventTouchUpInside];
return button;
}