2

我将 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 正在吃平移手势识别器。

4

2 回答 2

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;
}
于 2014-09-23T04:58:34.873 回答
2

我在 .h 文件中完成了这样的 < UIGestureRecognizerDelegate> ,您在该文件中实现了 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;
}
于 2014-12-04T06:59:48.227 回答