自分の場合はScrollView上に貼り付けて使うことを想定しているので他の処理をするときは上手くいかないかもしれません。
大体こんな感じ。
@interface CButton : UIViewController { UIButton* button; } - (UIButton*)getButton; @end
#import "CButton.h" @implementation CButton - (void)viewDidLoad : (NSString*)imageName : (CGPoint)center { button = [UIButton buttonWithType:UIButtonTypeCustom]; UIImage* img = [UIImage imageNamed: imageName]; button.frame = CGRectMake( 0, 0, 128, 128 ); [button setImage:img forState:UIControlStateNormal]; [button setImage:img forState:UIControlStateHighlighted]; [button addTarget:super.view.superview action:@selector(DidPushButton:) forControlEvents:UIControlEventTouchUpInside]; button.center = center; } - (UIButton*)getButton { return btn; } @end
引数のimageNameはファイル名(UIButtonTypeRoundRectなど自分で用意した画像を表示しないなら省略)、centerはボタンの中心位置。
基本的に普通のUIButtonと変わらないです。
違うのはaddTarget。
addTargetはいつも通りのselfだとタップした時点でエラーで落ちます。
ScrollView上に描画するこの場合は自分より1個上のビュー(要するにScrollViewこと)のsuper.view.superviewを指定してやります。
よくよく考えると「ですよねー」な感じだけど気づくのに時間かかりました…。
あとはボタンのサイズや透過度など別途引数で渡してあげれば汎用性も上がるんじゃないじゃないかと。
※追記
この状態だとScrollView上で用意されてるDidPushButtonの処理になります。
…全然クラス化出来てなくね?
CButtonで宣言したDidPushButtonを処理させるにはどうすればいいだろう。
※追記
複数の違う処理をするボタンはTagを使うといいみたいです。
button.tagでそれぞれの処理に振り分ける、みたいなやり方。
0 件のコメント:
コメントを投稿