这是一个客户项目,他希望它使用 TouchesBegan/Moved/Ended 而不是手势,因为它也必须与 iOS 3.0 和 3.1 兼容,并且手势是 iOS >= 3.2。
我必须检测自定义元素上的单击和长按,该元素是一种带有我们称为单元格的元素的 tableView。
我必须遵守的规则是:
- 单击必须在 0.1 秒后触发一个方法(我们称之为 cellTapped)
- 如果控件在执行 cellTapped 之前滚动,取消 cellTapped 执行
- 如果检测到 Long Tap,则运行 longTap 方法而不是 cellTapped
这就是我在 TouchesBegan 中所拥有的
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
self.isScrolling = NO;
// if single tap detected, fire method within 0.1 seconds
if ([self elementIsTapped:touches]) {
[self performSelector:@selector(cellTapped:)
withObject:nil
afterDelay:0.1];
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
if (self.isScrolling == NO) {
// started scrolling, cancel single tap method that was about to be executed
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(cellTapped:)
object:nil];
self.isScrolling = YES;
}
}
如何将长按检测添加到此逻辑?谢谢