【问题标题】:long press gesture on table view cell表格视图单元格上的长按手势
【发布时间】:2012-03-11 04:38:08
【问题描述】:

我想要在表格视图单元格上进行两种交互:正常点击和长按。我使用以下答案来帮助我入门:

Long press on UITableView

这样做的问题是,如果我在有效单元格上长按,该单元格将突出显示蓝色,并且长按手势不会触发(它认为它只是一个简单的点击)。但是,如果我在无效单元格上开始长按手势,然后将手指滑到有效单元格上然后松开,它就可以正常工作。

【问题讨论】:

  • 根据您的定义,什么是“无效单元格”?
  • 我认为它的“不需要细胞”

标签: objective-c ios uitableview uigesturerecognizer


【解决方案1】:

那里可能有更好的答案,但这里有一种方法:

首先在表格视图本身上创建一个长按手势识别器。

UILongPressGestureRecognizer* longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onLongPress:)];
[self.tableView addGestureRecognizer:longPressRecognizer];

然后,使用可以找到所选行的例程来处理它:

-(void)onLongPress:(UILongPressGestureRecognizer*)pGesture
{
if (pGesture.state == UIGestureRecognizerStateRecognized)
{
    //Do something to tell the user!
}
if (pGesture.state == UIGestureRecognizerStateEnded)
{
    UITableView* tableView = (UITableView*)self.view;
    CGPoint touchPoint = [pGesture locationInView:self.view];
    NSIndexPath* row = [tableView indexPathForRowAtPoint:touchPoint];
    if (row != nil) {
        //Handle the long press on row
    }
}
}

我没有尝试过,但我认为您可以通过让表格视图上的手势识别器等待长按失败来阻止该行显示选择。

【讨论】:

  • onLongPress 方法中你应该使用self.tableView 而不是创建一个新的tableView 实例。也使用self.tableView 而不是self.view
【解决方案2】:

我遇到了同样的问题并找到了一个很好的解决方案。 (至少在 iOS 7 上)

将此UILongPressGestureRecognizer 添加到单元格本身。

self.longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onSelfLongpressDetected:)];
[self addGestureRecognizer:self.longPressGesture];

将目标初始化为 self 很奇怪但很重要,并且还要再次向 self 添加gestureRecognizer,并调用 onSelfLongpressDetectedgets 方法。

【讨论】:

  • 这不是解决方案。我的意思是它可以工作,但我们谈论的是单击单元格内的特定 UITextView,而不是像单元格内的任何地方一样。
【解决方案3】:

我有一个接近这个的问题。首先,我尝试向可选单元格内的 UIView 添加长按手势,但没有成功。解决方案是将手势添加到单元格本身,就像之前在 Fabio 的回答中所说的那样。

在下面快速添加解决方案:

let longPress = UILongPressGestureRecognizer.init(target: self, action: #selector(longPress(_:)))
longPress.minimumPressDuration = 1.0
cell.addGestureRecognizer(longPress)

我在 UITableViewDataSource 方法 cellForRowAtIndexPath 中使用了上面的代码。

【讨论】:

    【解决方案4】:

    可能在 IB 中或以编程方式禁用选择

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    

    【讨论】:

    • 这只是禁用蓝色突出显示吗?
    • 我的理论是您的长按手势不会触发,因为单元格已经突出显示。请测试我的建议,你不会失去任何东西。
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多