引っ越しました。

このブログは引っ越しました。
今後は引越し先で更新を続けます。
新しいブログではソースコードにシンタックスカラーを付けているので見やすくなっていると思います。

こちらは数ヶ月後に削除しますのでよろしくお願いします。

2010年7月1日木曜日

UIButtonをクラス化

初級程度の知識しかないと意外と手こずったのでメモメモ。
自分の場合は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 件のコメント:

コメントを投稿