为什么UITableView的滑动删除有时可以正常工作?有时不?

时间:2012-12-18 09:17:45

标签: iphone ios uitableview swipe

我的视图中有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
     }
}

但是当我向表格行滑动时,有时会出现Delete按钮,有时则不会。 顺便说一句,我的单元格是自定义的,并且继承自UITableViewCell

我已将NSLog添加到上述方法中。当Delete按钮没有出现时,我得到的日志是这样的:

>> editingStyleForRowAtIndexPath
>> canEditRowAtIndexPath

出现Delete按钮时,日志如下:

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

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

4 个答案:

答案 0 :(得分:7)

请检查视图或超级视图是否有任何其他手势。如果是这样,请确保在设置手势委托之后实现UIGestureRecognizerDelegate的以下方法:

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

答案 1 :(得分:0)

有时,特别是在模拟器中,很难正确执行滑动。您会发现它很可能是物理,而不是编码问题。

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

答案 2 :(得分:0)

我也面临同样的问题...... 但最后我得到了解决方案: -
例如: -
  self.navigationController.interactivePopGestureRecognizer.enabled = NO;

如果您正在使用" commitcommiteditingstyle"您必须禁用该特定视图中的任何其他手势。 希望这会对你有所帮助...... :)

答案 3 :(得分:0)

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

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

@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带领我找到这个解决方案!