11

私はのコンテナとして機能するUIScrollViewを使用しているので、UITapGestureRecognizerを使用しています。基本的に私は引数を持つアクションメソッドを使用しようとしています。アクションメソッドにmyLabel.tagの値を送って、UILabelが持つものがタップによってトリガーされたことに応じて、どのようなアクションをとるべきかを知ることができます。UITapGestureRecognizer initWithTarget:action:引数を取るメソッド?

これを実行する1つの方法は、UILabelと同じくらい多くのアクションメソッドを持っていますが、それはコード化されていてもあまり「きれい」ではありません。私が達成したいのは、switch文を持つアクションメソッドを1つだけ持つことです。

が可能これですか、私はこの(ため息)のようにそれを行う必要があります:

UITapGestureRecognizer *myLabel1Tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabel1Tap)]; 
[myLabel1Tap addGestureRecognizer:myLabel1Tap]; 

UITapGestureRecognizer *myLabel2Tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabel2Tap)]; 
[myLabel1Tap addGestureRecognizer:myLabel2Tap]; 

UITapGestureRecognizer *myLabelNTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabelNTap)]; 
[myLabel1Tap addGestureRecognizer:myLabelNTap]; 

- (void)myLabel1Tap { 
// Perform action 
} 

- (void)myLabel2Tap { 
// Perform action 
} 

- (void)myLabelNTap { 
// Perform action 
} 

答えて

17

あなたの様々なラベルのスーパーでビューに単一のジェスチャー認識を追加します。

UITapGestureRecognizer *myLabelTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabelTapHandler:)]; 
[myLabelParent addGestureRecognizer:myLabelTap]; 

あなたがジェスチャーを取り扱う際に続いて、タップされたラベルが決定:

-(void)myLabelTapHandler:(UIGestureRecognizer *)gestureRecognizer { 
    UIView *tappedView = [gestureRecognizer.view hitTest:[gestureRecognizer locationInView:gestureRecognizer.view] withEvent:nil]; 

    // do something with it 
} 
+0

はそうではありませんセレクターのセミコラムを忘れてしまった? – alecnash

5

あなただけの1 UITapGestureRecognizerと構文を持って、あなたのジェスチャーハンドラ(あなたmyLaberXTap)、でを使用することができます。

- (void)handleGesture:(UITapGestureRecognizer*)gestureRecognizer { 
    ... 
} 

gesture.viewを使用して、現在作業しているビューを知ることができます。

関連する問題