为什么UITableView的刷卡删除有时可以正常工作,有时甚至不行?

我的视图上有一个UITableView ,我想要应用某个部分的滑动 – 删除模式行。 我已经执行如下:

  - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@">> canEditRowAtIndexPath"); if (indexPath.section == CanDeletedSection) { return YES; }else{ return NO; } } - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@">> editingStyleForRowAtIndexPath"); if (indexPath.section == CanDeletedSection) { return UITableViewCellEditingStyleDelete; } return UITableViewCellEditingStyleNone; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@">> commitEditingStyle"); if (editingStyle == UITableViewCellEditingStyleDelete) { // dosomething } } 

但是当我滑动表格行时,有时会出现Deletebutton,有时候不会。 顺便说一下,我的单元格是自定义的,并从UITableViewCellinheritance。

我已经将NSLog添加到上面的方法。 当Deletebutton不出现日志我得到这样的:

 >> editingStyleForRowAtIndexPath >> canEditRowAtIndexPath 

Deletebutton出现时,日志如下:

 >> editingStyleForRowAtIndexPath >> canEditRowAtIndexPath >> editingStyleForRowAtIndexPath >> canEditRowAtIndexPath >> canEditRowAtIndexPath >> editingStyleForRowAtIndexPath 

我做了一个演示,使用自定义单元格,它工作正常。 所以问题是由包含表视图的视图控制器引起的。 视图控制器从另一视图控制器inheritance,在该视图控制器中,存在用于隐藏键盘的轻击手势。 但是当我从视图控制器中删除它们时,结果是一样的。

请检查视图或超级视图是否有其他手势。 如果是这样,请在设置手势委托之后确保您在UIGestureRecognizerDelegate下方执行:

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } 

有时候,特别是在模拟器中,很难正确地执行滑动操作。 你会发现这很可能是一个物理的 ,而不是一个编码问题。

此外,您可能需要检查自定义单元格是否不包含捕获滑动的元素,而不会将其传递给单元格。

我也面临同样的问题…但最后我得到了解决scheme:

例:-
self.navigationController.interactivePopGestureRecognizer.enabled = NO;

如果您正在使用“commitcommiteditingstyle”,则必须在该特定视图中禁用任何其他手势。

希望对你有帮助… :)

视图层次结构中其他位置的手势识别器可以拦截并阻止滑动操作。

我在视图控制器中用这个类别解决了它:

 @interface UIView (CellSwipeAdditions) - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer; @end @implementation UIView (CellSwipeAdditions) - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } @end 

感谢bademi为我带来这个解决scheme!