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

首先,我将oneLabeltwoLabel作为子视图添加到self.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 回答
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 回答