UIButtonを追加する

2010/08/16

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

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    

ボタンのスタイルの隠し機能??

UIButton の隠し API