Objective c 在UITap手势处理程序中访问UIImageView的标记值

Objective c 在UITap手势处理程序中访问UIImageView的标记值,objective-c,ios,Objective C,Ios,我有一个附加到图像视图的手势。我想在几张图片上重复使用相同的手势。为此,处理程序方法需要能够识别点击来自哪个图像。下面的方法尝试访问发件人图像视图的标记值。我是基于对这个问题的回答。然而,我在调试器中得到一个错误,读取“无法识别的选择器发送到实例”。我完全按照答案中写的那样尝试了它,并且还尝试了将发送者作为参数附加到方法中,如下所示。她的方法奏效了。有人能告诉我我做错了什么吗 - (void)viewDidLoad { [super viewDidLoad]; UITapGes

我有一个附加到图像视图的手势。我想在几张图片上重复使用相同的手势。为此,处理程序方法需要能够识别点击来自哪个图像。下面的方法尝试访问发件人图像视图的标记值。我是基于对这个问题的回答。然而,我在调试器中得到一个错误,读取“无法识别的选择器发送到实例”。我完全按照答案中写的那样尝试了它,并且还尝试了将发送者作为参数附加到方法中,如下所示。她的方法奏效了。有人能告诉我我做错了什么吗

- (void)viewDidLoad
{
    [super viewDidLoad];

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    topLeftImage.userInteractionEnabled = YES;
    [topLeftImage addGestureRecognizer:singleTap];

}

- (void)handleSingleTap:(UITapGestureRecognizer*)gestureView andSender:(id)sender {

    switch (((UIGestureRecognizer *)sender).view.tag)
    {
        case 0:
            NSLog(@"zero");
        case 1:
            NSLog(@"one");
    }

}

从UIGestureRecognitor类参考:

调用的操作方法必须符合以下条件之一 签名:

  • (无效)手感
  • (无效)手势识别器:(UIgestureRecognitor*)手势识别器
您的方法(
-(void)handleSingleTap:(UITapGestureRecognitor*)gestureView和sender:(id)sender
)与任一签名都不符。除此之外,当您创建手势识别器时,您使用的是action
@选择器(handleSingleTap:)
,该选择器与此函数不匹配,因此不应该调用它。请尝试以下方法:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    topLeftImage.userInteractionEnabled = YES;
    [topLeftImage addGestureRecognizer:singleTap];

}

- (void)handleSingleTap:(UIGestureRecognizer*)gestureView {

    switch (gestureView.view.tag)
    {
        case 0:
            NSLog(@"zero");
        case 1:
            NSLog(@"one");
    }

}
同意@Inafziger(像往常一样),但这里有一个更好的方法:在不同的视图上放置不同的手势识别器

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

// just like first as far as the target and selector, but a distinct object
singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[bottomRightImage addGestureRecognizer:singleTap];

// and so on ...
现在,处理程序只需询问gr它连接到哪个视图。没有标签,没有开关语句

- (void)handleSingleTap:(UIGestureRecognizer*)gr {
    UIImageView *theTappedView = (UIImageView *)gr.view
}

谢谢这是个好建议。我个人喜欢使用switch语句而不是使用不同的手势识别器。但我明白为什么有些人更喜欢你的方法。