IBでなくXcodeでUIButtonを追加してみる。
IBでおなじみのボタンです。 UIButton.hに定義されています。
UIButtonTypeCustom = 0,
UIButtonTypeRoundedRect,
UIButtonTypeDetailDisclosure,
UIButtonTypeInfoLight,
UIButtonTypeInfoDark,
UIButtonTypeContactAdd,
UIButton buttonWithType:で設定します。
これは他のオブジェクトが利用するのでUIControllに定義されています。
UIControlEventTouchDown = 1 << 0, // on all touch downs
UIControlEventTouchDownRepeat = 1 << 1, // on multiple touchdowns (tap count > 1)
UIControlEventTouchDragInside = 1 << 2,
UIControlEventTouchDragOutside = 1 << 3,
UIControlEventTouchDragEnter = 1 << 4,
UIControlEventTouchDragExit = 1 << 5,
UIControlEventTouchUpInside = 1 << 6,
UIControlEventTouchUpOutside = 1 << 7,
UIControlEventTouchCancel = 1 << 8,
UIControlEventValueChanged = 1 << 12, // sliders, etc.
UIControlEventEditingDidBegin = 1 << 16, // UITextField
UIControlEventEditingChanged = 1 << 17,
UIControlEventEditingDidEnd = 1 << 18,
UIControlEventEditingDidEndOnExit = 1 << 19, // 'return key' ending editing
UIControlEventAllTouchEvents = 0x00000FFF, // for touch events
UIControlEventAllEditingEvents = 0x000F0000, // for UITextField
UIControlEventApplicationReserved = 0x0F000000, // range available for application use
UIControlEventSystemReserved = 0xF0000000, // range reserved for internal framework use
UIControlEventAllEvents = 0xFFFFFFFF
- (void) createButton(NSInteger) index {
UIButton *button = [UIButton buttonWithType: UIButtonTypeRoundedRect];
button.tag = index;
//button.titleLabel.text = @"ボタン"; //iphone3Gまで?
[button setTitle:@"C" forState:forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize: 12];
button.frame = CGRectMake(0.0f, 0.0f, 15.0f, 15.0f);
button.titleLabel.shadowOffset = CGSizeMake (1.0, 0.0);
[button addTarget:self action:@selector() forControlEvents:UIControlEventTouchUpInside];
- (void) editBar:(UIButton *)sender {
NSLog(@"---- editBar ----");
NSLog(@"%d", sender.tag);
}
tagはUIViewに定義されているプロパティですが、アプリケーション上のグループIDみたいなもののようです。 例えば複数のボタンを作成して、どのボタンがクリックされたかを連番のキーで判別するのもありかな?と。
CGRectMakeで座標(第1,2引数)とサイズ(第3,4引数)を指定します。
addTarget:でイベントを登録できます。 forControlEvents:はイベントの種類を指定します。
titleLabel.textはiOS4では利用できないみたいなので、setTitleで指定します。 その際、ボタンの状態も指定する必要があります。
UIControlStateNormal = 0,
UIControlStateHighlighted = 1 << 0, // used when UIControl isHighlighted is set
UIControlStateDisabled = 1 << 1,
UIControlStateSelected = 1 << 2, // flag usable by app (see below)
UIControlStateApplication = 0x00FF0000, // additional flags available for application use
UIControlStateReserved = 0xFF000000