1

代码

我有一些代码将UILongPressGestureRecognizer手势识别器添加到被调用的_recognizer子类中:UITableViewCellcell

...
UILongPressGestureRecognizer *_recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(cellLongPressRecognized:)];
_recognizer.allowableMovement = 20;
_recognizer.minimumPressDuration = 1.0f;
[[cell contentView] addGestureRecognizer:_recognizer];
[_recognizer release];
...

选择-cellLongPressRecognized:器仅在手势结束时记录:

- (void) cellLongPressRecognized:(id)_sender {
    if (((UILongPressGestureRecognizer *)_sender).state == UIGestureRecognizerStateEnded)
        ALog(@"[MyViewController] -cellLongPressRecognized: gesture ended...");
}

当我点击、按住并释放一个单元格时,我的控制台会显示一条日志消息:

[MyViewController] -cellLongPressRecognized: gesture ended...

到现在为止还挺好。

问题

问题是表格单元格的背景仅保持选中状态 1.0 秒,即_recognizer.minimumPressDuration属性。

如果我将手指放在设备上的时间超过 1.0 秒,则单元格的背景将从UITableViewCellSelectionStyleBlue选择样式翻转回其通常的、不透明的、未选择的背景。

为了确保这个问题只涉及特定于手势的代码,我-tableView:didSelectRowAtIndexPath:在测试时禁用了。

问题

如何无限期地选择背景,仅在“长按”手势结束时才翻转?

4

1 回答 1

3

我将测试条件从更改UIGestureRecognizerStateEnded为,UIGestureRecognizerStateBegan并且手势与单元格选择状态更改同步:

- (void) cellLongPressRecognized:(id)_sender {
    if (((UILongPressGestureRecognizer *)_sender).state == UIGestureRecognizerStateBegan)
        ALog(@"[MyViewController] -cellLongPressRecognized: gesture began...");
}

以这种方式命名事件似乎违反直觉,但这似乎有效。

于 2010-07-16T00:48:45.803 回答