RSS

UIButtonのbuttonWithTypeはオーバーライドできない

@iphone_dev_jpでUIButtonのサブクラスとbuttonWithTypeについての質問があった.

結論から言うと,UIButtonのサブクラスでbuttonWithTypeはオーバーライドはできない(そもそもクラスメソッドのオーバーライドはしない).UIButtonのサブクラスを作る場合は,buttonWithTypeに触れずにコーディングしないといけない.ただ,UIButtonはクラスメソッド(buttonWithType)でしか初期化方法がドキュメントに載っていなく,気になっていたので,ちょうど良かったので調べてみた.

UIButtonのサブクラスMyButtonを作って,buttonWithTypeを使うとエラーが起こる.

+(id)buttonWithType:(UIButtonType)buttonType_
{
MyButton *myButton = [super buttonWithType:UIButtonType_];
[myButton setHoge:hoge_];
return myButton;
}

エラーは仕方ないとして,エラーメッセージを見て気がついていたことがある.buttonWithTypeに与えるUIButtonType_によって返ってくるクラスが変わっていた.UIButtonTypeCustomだと自作クラス(MyButton),UIButtonTypeRoundedRectだとPrivateボタン,その他だとUIButtonで返ってくる.UIButtonって簡単に使っているけど,結構奥深い.

実は質問者本人が最初ごろにしたツイートで既に結論がでてたんだよな.質問者がしたいことが今一わからないから何だけど,カテゴリでメソッドを追加したらいいんじゃないかな.

Bookmark and Share

0 コメント: