SWRevealViewController和TableView - 滑动删除不起作用

时间:2014-08-15 01:17:44

标签: ios objective-c uitableview swipe swrevealviewcontroller

我将SWRevealViewController添加到我的应用程序,以及汉堡包堆栈以访问我的菜单。我的应用程序有一个UITableView用于主应用程序视图。我想允许用户使用滑动删除功能从列表中删除项目。

我启用了滑动删除并添加了一个方法调用来处理它。我注意到该方法永远不会被调用。不知道如何让它发挥作用。

非常感谢任何帮助。

我被问到一个代码示例。我没有对SWRevealViewController标准源代码进行任何更改。在我的TableView代码中,我添加了以下内容:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}

通常,当您执行从右向左滑动时,上面的代码应显示删除按钮。但是,这种情况并没有发生。我的猜测是SWRevealViewController正在吃平移手势识别器。

2 个答案:

答案 0 :(得分:4)

在阅读了一个向这个类的制造者提出类似问题的人的线程后,找到了一个解决方案。无论您使用什么类添加手势识别器,都可以将其作为SWRevealController的委托,然后粘贴到此方法中。

#pragma mark - SWRevealViewControllerDelegate

- (BOOL)revealControllerPanGestureShouldBegin:(SWRevealViewController *)revealController
{
    float velocity = [revealController.panGestureRecognizer velocityInView:self.view].x;
    if (velocity < 0 && self.revealViewController.frontViewPosition == FrontViewPositionLeft)
        return NO;
    else
        return YES;
}

答案 1 :(得分:2)

我这样做了&lt; UIGestureRecognizerDelegate&GT;在.h文件中,您正在实现tableview单元格删除功能,并在.m文件viewDidLoad

[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];        
self.revealViewController.panGestureRecognizer.delegate = self;

之后只需使用此方法

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"])
    return NO;
else
    return YES;
}