2012-02-11 3 views
0

現在、私はそれがuitapgestureに関連オブジェクトを追加するには?

tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(addCompoundToLabel:) withObject:data]; 

のようなものだった場合私のコードはきれいになり、私は関連オブジェクトを使用すると、ジェスチャー認識でオブジェクトを渡すことが許可されていることを読んで、しかし、読み取り後

tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(addCompoundToLabel:)]; 

私のコードを持っていますドキュメント、私は自分のコードに実装する方法をかなり理解していません。関連するオブジェクトの実装例が評価されるだろう。おかげ

EDIT:

これはaddCompoundの始まりは、関連オブジェクトを使用して

- (void)addCompoundToLabel:(UIGestureRecognizer *)recognizer { 

if([recognizer state] == UIGestureRecognizerStateEnded) { 

     FormulaLabel* label = (FormulaLabel*)[recognizer view]; 
+0

理由あなたはそれをしたいですか?あなたはUITapGestureRecognizerをサブクラス化し、ivarメンバを追加することができます –

答えて

1

のように見えるものでは厄介なソリューションです。代わりに、偽のターゲットオブジェクトを作成し、UIViewDataを与え、両方のメソッドにセレクタメソッドでアクセスできます。それははるかに読みやすく、あなたのコードはあなたの意図をもっとよく表しています。ここで

は、迅速かつ汚い例です。

@interface FalseTarget : NSObject { 
    MyViewController *_viewCtrl; 
    MyData *_data; 
} 
-(id)initWithViewCtrl:(MyViewController*)viewCtrl andData:(MyData*)data; 
-(void)tap:(id)sender; 
@end 

@implementation 
-(id)initWithViewCtrl:(MyViewController*)viewCtrl andData:(MyData*)data { 
    self = [super init]; 
    if (self) { 
     _viewCtrl = viewCtrl; 
     _data = data; 
    } 
    return self; 
} 
-(void)tap:(id)sender { 
    [_viewCtrl processTapFromSender:sender withData:_data]; 
} 
@end 

は、あなたのコントローラにprocessTapFromSender:withData:メソッドを追加します。

-(void)processTapFromSender:(id)sender withData:(MyData*)data { 
    // Your action 
} 

今、あなたはこのようなあなたのタップ認識を作成することができます。

FalseTarget *target = [[FalseTarget alloc] initWithViewCtrl:self andData:data]; 
tap = [[UITapGestureRecognizer alloc] initWithTarget:target action:@selector(tap:)]; 
+0

これは、 'tap'メソッドがビューコントローラにあるようにこれを行う方法はありますか? – Mahir

+0

また、私は自分の質問を編集しました – Mahir

+0

@マヒエルもちろん、編集された答えを見てください。 – dasblinkenlight

関連する問題