@iphone_dev_jpでUIButtonのサブクラスとbuttonWithTypeについての質問があった.
結論から言うと,UIButtonのサブクラスでbuttonWithTypeはオーバーライドはできない(そもそもクラスメソッドのオーバーライドはしない).UIButtonのサブクラスを作る場合は,buttonWithTypeに触れずにコーディングしないといけない.ただ,UIButtonはクラスメソッド(buttonWithType)でしか初期化方法がドキュメントに載っていなく,気になっていたので,ちょうど良かったので調べてみた.
UIButtonのサブクラスMyButtonを作って,buttonWithTypeを使うとエラーが起こる.
エラーは仕方ないとして,エラーメッセージを見て気がついていたことがある.buttonWithTypeに与えるUIButtonType_によって返ってくるクラスが変わっていた.UIButtonTypeCustomだと自作クラス(MyButton),UIButtonTypeRoundedRectだとPrivateボタン,その他だとUIButtonで返ってくる.UIButtonって簡単に使っているけど,結構奥深い.
実は質問者本人が最初ごろにしたツイートで既に結論がでてたんだよな.質問者がしたいことが今一わからないから何だけど,カテゴリでメソッドを追加したらいいんじゃないかな.
Read more
結論から言うと,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って簡単に使っているけど,結構奥深い.
実は質問者本人が最初ごろにしたツイートで既に結論がでてたんだよな.質問者がしたいことが今一わからないから何だけど,カテゴリでメソッドを追加したらいいんじゃないかな.