如何确定在 iOS 中点击了哪个视图?

Posted

技术标签:

【中文标题】如何确定在 iOS 中点击了哪个视图?【英文标题】:How can I figure out which view was tapped on in iOS? 【发布时间】:2012-05-17 18:43:51 【问题描述】:

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

【问题讨论】:

【参考方案1】:

在创建手势识别器时,您始终将其与视图联系起来。当检测到手势并调用与创建的手势关联的选择器时,您可以使用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.

【讨论】:

【参考方案2】:

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

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;

也称为蛮力。


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

【讨论】:

以上是关于如何确定在 iOS 中点击了哪个视图?的主要内容,如果未能解决你的问题,请参考以下文章

快速警报视图(iOS8),单击确定和取消按钮,点击该按钮

ios怎么判断我点击的哪个视图

iOS Stackview Tap Buttons在彼此之上

如何确定从iOS后台返回前台时加载哪个视图?

带有 OK 和 Cancel 的 Swift 警报视图:点击了哪个按钮?

我应该如何确定 UIKit 将打开哪个场景,以便我可以在正确的窗口中设置我的 UI? (iOS 13+)