0

ビューには 5 つのラベルがあり、それぞれ 1、2、3、4、5 のタグが付けられています。ユーザーの操作を有効にし、タップ ジェスチャを追加しました。

今私が欲しいのは、触れられているラベルのタグを取得することです。

私はこのようなことをしています:

tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGestureSelector)];

tapGesture.numberOfTapsRequired = 1.0;     

- (void)tapGestureSelector :(id)sender
{
    // I need the tag to perform different tasks.
    // So that I would like to get the touched label's tag here.    
}

私の質問が明確でない場合は、私に尋ねてください。

助けてくれてありがとう。

4

3 に答える 3

1

のタグにアクセスするには、メソッドUILabelで次のコードを使用する必要がありますtapGestureSelector

- (void)tapGestureSelector :(id)sender
    {
        UITapGestureRecognizer *gesture = (UITapGestureRecognizer *)sender;
        int labelTag = gesture.view.tag;
        NSlog(@"Clicked label %d", labelTag);

        switch(labelTag)
        {
           case 1:
                 NSlog(@"Clicked on label 1");
                 break;
           case 2:
                 NSlog(@"Clicked on label 2");
                 break;

           //so on
        }
    }
于 2012-11-09T09:29:33.207 に答える
1

私はこの方法で解決策を見つけましたが、それは私にとって非常にうまくいきました。こちらも参考になれば幸いです。とてもシンプルで短いです。

この関数を .m ファイルに追加することで、ラベルのタグを取得できます。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch=[touches anyObject];
    UILabel *label=(UILabel *)touch.view;

    NSLog(@"Label that is tapped has tag %d",label.tag);
}

とても素敵な提案と回答をありがとうございました。SOからのすべての質問に対して、今後も常に良い回答が得られることを願っています。ありがとうございました。

于 2012-11-09T12:30:52.210 に答える
1

まず、サブビューとしてoneLabelandを に追加しました。それならタグを取得する必要はないと思います。twoLabelself.view

CGPoint tapPoint = [tapGesture locationInView:self.view];

if (CGRectContainsPoint(self.oneLabel.frame, tapPoint)) {
    NSLog(@"tapped one label");
} else if (CGRectContainsPoint(self.twoLabel.frame, tapPoint)) {
    NSLog(@"tapped two label");
}
于 2012-11-09T10:15:00.413 に答える