如何确定在iOS中使用哪个视图?

时间:2012-05-17 18:43:52

标签: objective-c ios xcode

在我的手势识别器处理程序中,我需要知道识别器附加到/响应的屏幕上的哪个项目。例如,如果用户点击图像,我的处理程序如何找出被点击的图像?

2 个答案:

答案 0 :(得分:7)

创建手势识别器时,您始终将其与视图绑定。当检测到手势并且调用与创建的手势绑定的选择器时,您可以使用gesture.View通过手势找出关联的视图。

以下是示例代码

UIImageView *imageView = self.someImageView;
UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageSingleTapped:)];
[imageView addGestureRecognizer:singleTapGesture];

[singleTapGesture release]; 


- (void) imageSingleTapped:(UIGestureRecognizer*)recognizer
{
     UIView *viewTiedWithRecognizer = recognizer.view; // This is the view associated with gesture recognizer.
}

答案 1 :(得分:1)

我也遇到了问题。我不知道我是否有正确的解决方案,但这就是我所做的。

CGPoint point = [gestureRecognizer locationInView:self];
CGPoint offset = self.scrollView.contentOffset;
CGPoint contentPoint = CGPointMake(point.x + offset.x, point.y + offset.y);

for (UIView *view in self.scrollView.subviews)
    if (CGRectContainsPoint(view.frame, contentPoint))
        return view;

return nil;

也称为蛮力。


现在我看着它,我看到了一个错误。如果用户直接触摸滚动条,则滚动条可能是返回的视图。我从来没有这样做过(据我所知至少),但我仍然应该测试并编写解决方案。