UITableViewCell 上的 UILongPressGestureRecognizer 在 iOS 5 和 4.3 中不起作用

Posted

技术标签:

【中文标题】UITableViewCell 上的 UILongPressGestureRecognizer 在 iOS 5 和 4.3 中不起作用【英文标题】:UILongPressGestureRecognizer on UITableViewCell does not work in iOS 5 and 4.3 【发布时间】:2012-08-15 16:57:39 【问题描述】:

我有一个表格视图,我在表格视图单元格上使用 UILongPressGestureRecognizer 在单元格上显示上下文菜单,以允许用户执行一些额外的功能。在 ios 5.1 中一切正常,但是当我在 iOS 5 和 4.3 中测试时,没有触发该事件。

有谁知道如何解决这个问题,请帮助我,在此先感谢。

下面是我的代码:

在tableViewCell.h中:添加UIGestureRecognizerDelegate

在tableViewCell.m中

UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] 
                                                     initWithTarget:self action:@selector(handleLongPress:)];
longPressRecognizer.minimumPressDuration = 1.5;
longPressRecognizer.numberOfTouchesRequired = 1;
longPressRecognizer.numberOfTapsRequired = 0;
longPressRecognizer.delegate = self;

[self addGestureRecognizer:longPressRecognizer];
[longPressRecognizer release];

// 事件处理方法

- (void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
    
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) 
    
        // Do something.
    

【问题讨论】:

能否展示事件处理方法和添加识别器的代码? 嗨安娜,我在我的问题中添加了代码。 看起来不错。在 5/4.3 上运行时,确保实际调用了添加识别器的代码。问题可能出在代码的其他部分。 在这个问题上花了 1.5 天后,我终于找到了解决这个问题的解决方案,方法是将 UILongPressGuestureRecognizer 添加到 tableView 而不是在每个单元格中。 您应该将其发布为答案。 【参考方案1】:

在这个问题上花了 1.5 天后,我发现 tableView 以某种方式收到长按事件但 tableViewCell 在 iOS 5/4.3 上没有。所以我通过将 UILongPressGuestureRecognizer 添加到 tableView 然后在长按事件处理程序中然后调用 tableViewCell 来显示上下文菜单来解决这个问题,它可以工作。

【讨论】:

【参考方案2】:

我也遇到了这个问题。我发现只有当'delegate'属性为'NULL'时,长按手势识别器才能正常工作。因此,请尝试删除此行。

longPressRecognizer.delegate = self;

【讨论】:

这应该是正确的答案,在 iOS5 中对我来说非常出色。

以上是关于UITableViewCell 上的 UILongPressGestureRecognizer 在 iOS 5 和 4.3 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 上的动画

如何使 UITableViewCell 上的 UIProgressView 立即更改?

UITableViewCell 上的 UITextView

UITableViewCell 内的 UIView 上的 UIGestureRecognizer

UITableViewcell 和 UITableVIew 上的手势识别器

自定义 UITableViewCell:“loadNibNamed:”上的 SIGABRT