ONTapGesture 不工作?

Posted

技术标签:

【中文标题】ONTapGesture 不工作?【英文标题】:UITapGesture not working? 【发布时间】:2016-10-26 07:44:24 【问题描述】:

代码:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(OpenBrandUrlLinkMetod:)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
FirstImgV.userInteractionEnabled = YES;
[FirstImgV addGestureRecognizer:singleTap];

-(void)OpenBrandUrlLinkMetod:(UITapGestureRecognizer *)recognizer

    NSLog(@"hello!!"); 

但未调用 OpenBrandUrlLinkMetod。

任何人都可以帮助我。

【问题讨论】:

您是否尝试过将点击手势添加到非常明显的视图中?也许您的图像视图前面有一些东西(可能是一个面具?)或者由于某种原因无法访问?您可以在空白视图中尝试此操作以确保代码正常吗?看起来不错,但我想消除一些可能性:) 在 UIScrollView 或 UiTableView 中添加 FirstImgV 的位置 我在 UIView 上添加了 FirstImgV。 (UITapGestureRecognizer *)recognizer 您是否在超过 1 个标签或图像或任何内容中使用相同的方法? @HariMohan 检查我的答案 【参考方案1】:

试试这个,

为您的UITapGestureRecognizer 设置委托,

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(OpenBrandUrlLinkMetod:)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
singleTap.delegate = self;  // set delegate to self
_img.userInteractionEnabled = YES;
[_img addGestureRecognizer:singleTap];

通过以下代码检查手势识别器是否正在调用您的UIImageview

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

    if ([[touch.view class] isEqual:[UIImageView class]]) 
        return YES;
    else
        return NO;
    

然后使用你的 TapGesture 方法来做你的事情,

-(void)OpenBrandUrlLinkMetod:(UITapGestureRecognizer *)recognizer

    NSLog(@"hello!!");

【讨论】:

请把正确答案标记出来,方便其他人使用。【参考方案2】:

singleTap 可能在任何触摸事件发生之前被垃圾回收。 为防止这种情况,您必须将其保留在班级的某处:

@interface YourClass

/// Your gesture recognizer gets referenced/retained here:
@property (strong, nonatomic) UITapGestureRecognizer *singleTap;

@end

然后:(可能在 viewDidLoad 中)

_singleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(OpenBrandUrlLinkMetod:)];
_singleTap.numberOfTapsRequired = 1;
_singleTap.numberOfTouchesRequired = 1;
FirstImgV.userInteractionEnabled = YES;
[FirstImgV addGestureRecognizer: _singleTap];

【讨论】:

【参考方案3】:

我将您的代码放入我的项目中,它完全可以运行,您可以在 VIDEO 中查看代码和视图控制器。

我只是添加了这个委托<UIGestureRecognizerDelegate>

只需添加此委托并尝试一下

【讨论】:

它是否有效?我还会向您发送带有特定点击手势代码的视频,如果它不起作用,请告诉我【参考方案4】:

我认为您在相关视图控制器中还有其他手势识别器。在这种情况下,这段代码应该能让你继续前进。或者试试这段代码,然后设置委托。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    return YES;

【讨论】:

以上是关于ONTapGesture 不工作?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI onTapGesture 仅调用一次

使用 SwiftUI List()、ForEach()、.onTapGesture WatchOS6 传递值的问题

onTapgesture 禁用 View SwiftUI 的按钮

如果它连接的 UIImageView 在 UIScrollView 下,是不是可以让 Tap Gesture Recognizer 工作?

onTapGesture 和 onLongPressGesture 没有响应

SwiftUI:将链接与 onTapGesture 一起使用