他のメソッドであればNSInvocationクラスを使って@selectorに引数を渡す事はできるのですが、addTarget:action:forControlEvents:メソッドでは不可能のようです (こちら参照)。
今回はそのaddTarget:action:forControlEvents:メソッドに引数を渡す方法をメモで。かなり力技でやっとります(笑)
今回は以下のような形で呼び出す場合の例です。
//ボタンが押されたときの処理
[(UIButton*)btn addTarget:self action:@selector(btnDidPush:) forControlEvents:UIControlEventTouchUpInside];
//押されたときに呼ばれるメソッド
-(void) btnDidPush:(UIButton*)button{
//なんかいろいろやる
}
やってみる
それではやっていきます。今回は、UIButtonを別のクラスとして「CustomButton」クラスを、そしてそれを扱うUIViewControllerクラスを継承した「HogeViewController」クラスを使用します。
CustomButtonクラス
CustomButton.h
#import <UIKit/UIKit.h>
@interface CustomButton : UIButton {
NSString *_str;
}
@property (nonatomic, retain) NSString *str;
@end
CustomButton.m
#import "CustomButton.h"
@implementation CustomButton
@synthesize str = _str;
-(id)init
{
if(self=[super init]){
_str=nil;
}
return self;
}
- (void)dealloc {
[self.str release];
_str = nil;
[super dealloc];
}
@end
HogeViewControllerクラス
HogeViewController.h
#import <UIKit/UIKit.h>
@class CustomButton;
@interface HogeViewController : UIViewController
{
CustomButton *customButton;
}
@property (nonatomic, retain) CustomButton *customButton;
@end
HogeViewController.m
#import "HogeViewController.h"
@implementation HogeViewController
@synthesize customButton = _customButton;
-(id)init
{
if(self=[super init]){
self.customButton = [[CustomButton alloc]init];
//UIbuttonの初期化いろいろ
[self addSubview:self.customButton];
NSString *s = @"12345";
self.customButton.str = s; //プロパティを介して値をセット
[self.customButton addTarget:self action:@selector(btnDidPush:) forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
- (void)dealloc {
[self.customButton release];
_customButton = nil;
[super dealloc];
}
-(void) btnDidPush:(CustomButton*)button{
NSLog(@"%@", button.str); //取得できた値を煮るなり焼くなり
}
やっていることはあまり大したことではないですね。HogeViewControllerクラスでCustomButtonクラスを初期化する際に、プロパティを介して値を渡してあげているだけです。
結構面倒ですね(笑)
もっと良い方法があればいいのですが、これ位しか思いつきません(汗)
addTarget:action:forControlEvents:メソッドで引数を渡せるようにはならないかなあ。
0 件のコメント:
コメントを投稿