at_yasu's blog

ロード的なことを

UIButton と setTitle:forState:

UIButtonですが、何か挙動不審なのでメモ。


forState: の引数、UIControlState ですが、それぞれ(なぜか)論理演算できるようにシフトしているんです。

enum {
   UIControlStateNormal               = 0,
   UIControlStateHighlighted          = 1 << 0,
   UIControlStateDisabled             = 1 << 1,
   UIControlStateSelected             = 1 << 2,
   UIControlStateApplication          = 0x00FF0000,
   UIControlStateReserved             = 0xFF000000
};


で、こんな状態だから、和集合で一気にそれぞれの状態のタイトルを指定できるんだろうと思い、

[button setTitle:@"title" forState:(UIControlStateNormal | UIControlStateHighlighted)];

とやったのですが見事うまくいかない。多分中でswitch文でやっているからでしょうね。てなわけで、setTitle:forState: は一つずつ丁寧に入れましょうと。


バグなのか微妙な所だけど…とここまで書いて思ったけど、hightedの状態でDisabledの状態があり得るのかしら。それ考えてこうなってるのだとしたら、一気に設定するんじゃなくて、それぞれの状態を設定する必要もあるってことかしら、想像付かんが・・・