【问题标题】:Double tap in cells doesn't work on iOS9双击单元格在 iOS9 上不起作用
【发布时间】:2015-12-19 19:25:46
【问题描述】:

我们的项目有一个自定义 UICollectionViewCell,它使用 UITapGestureRecognizer 处理单击和双击,以及一个也使用单击 UITapGestureRecognizer 的子视图。

这是我们项目中单击/双击设置的方式:

    _singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    _singleTapGestureRecognizer.numberOfTapsRequired = 1;
    [self addGestureRecognizer:_singleTapGestureRecognizer];

    _doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    _doubleTapGestureRecognizer.numberOfTapsRequired = 2;
    [self addGestureRecognizer:_doubleTapGestureRecognizer]

    [_singleTapGestureRecognizer requireGestureRecognizerToFail:_doubleTapGestureRecognizer];

在我们的代码中,我们还通过执行这些操作来取消单击/双击,

    self.singleTapGestureRecognizer.enabled = NO;

    self.doubleTapGestureRecognizer.enabled = NO;
    self.doubleTapGestureRecognizer.enabled = YES;

    self.singleTapGestureRecognizer.enabled = YES;

这些曾经在 iOS9 之前的设备上运行良好,但是最近,我发现在 iOS9 设备上,双击永远不会触发。每次我尝试双击单元格时,它都会立即记录单击,几乎没有延迟。

当我试图查看它时,我发现在注册singleTapGestureRecognizer时,doubleTapGestureRecognizer仍然处于状态Possible not Failed。

single tap: <UITapGestureRecognizer: 0x7f94ead42220; state = Ended; view = <UIView 0x7f94ead3f710>; target= <(action=handleSingleTap:, target=<PVEntityStreamCellForSetOnboarding 0x7f94ead3f1e0>)>; must-fail = {
<UITapGestureRecognizer: 0x7f94ead42810; state = Possible; view = <UIView 0x7f94ead3f710>; target= <(action=handleDoubleTap:, target=<PVEntityStreamCellForSetOnboarding 0x7f94ead3f1e0>)>; numberOfTapsRequired = 2>
}>

我还发现,如果我先点击包含另一个 UITapGestureRecognizer 的子视图,然后双击将起作用,一旦我滚动集合视图,就不可能对任何单元格进行双击。

有没有人有类似的问题或知道如何解决这个问题?

【问题讨论】:

    标签: ios objective-c iphone uicollectionview ios9


    【解决方案1】:

    我遇到了类似的问题,在我的情况下,修复是为 singleTapGestureRecognizer 实现一个委托方法。我还尝试对单击/双击使用取消,但没有成功。现在,我的代码看起来像这样(它是用 swift 编写的,但很容易阅读):

    let singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("handleSingleTap:"))
    let doubleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("handleDoubleTap:"))
    
    singleTapGestureRecognizer.numberOfTapsRequired = 1
    doubleTapGestureRecognizer.numberOfTapsRequired = 2
    
    singleTapGestureRecognizer.delegate = self
    
    singleTapGestureRecognizer.requireGestureRecognizerToFail(doubleTapGestureRecognizer)
    view.addGestureRecognizer(singleTapGestureRecognizer)
    view.addGestureRecognizer(doubleTapGestureRecognizer)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 2016-01-27
      • 1970-01-01
      相关资源
      最近更新 更多