滑动删除UITableViewCell无法正常工作

时间:2014-12-19 04:33:41

标签: ios objective-c uitableview

我正在使用 SWRevealViewController 作为侧边菜单。加载的UIViewController包含一个UITableView。表视图已启用幻灯片删除。但是,编辑功能始终不起作用。即, tableView:commitEditingStyle:不会被触发。虽然经过几次尝试后才会发生。我相信手势识别器存在冲突。已经有一天了。有人可以帮帮我吗?

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger row = [indexPath row];
    NSUInteger count = [self.shopListArray count];
    if (row < count) {
        [[[self.shopListArray objectAtIndex:indexPath.section] objectForKey:IFRecipe_ingredient]  removeObjectAtIndex:row];
    }
    [self.shopListTableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}

手势发生冲突时该怎么办?

4 个答案:

答案 0 :(得分:0)

在代码中设置UITableViewCellEditingStyle

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
 return UITableViewCellEditingStyleDelete;
}

和SWRevealViewController中的平移手势识别器问题,在superview中包含平移手势识别器,我们在视图中获取tableview swibe识别器问题,在SWRevealViewController中删除平移手势并检查。

答案 1 :(得分:0)

为了启用表格视图的编辑模式,您可以在UITableView上调用edit方法, 在viewdidloadviewwillappear

// try this

[self.tableView setEditing:YES animated:YES];

然后你可以轻松地做到这一点。

答案 2 :(得分:0)

试试这个,

首先在您的加载方法上或在需要时将tableview编辑模式设为YES。

[self.tableView setEditing:YES animated:YES];

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellEditingStyleDelete; 
}

- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}

答案 3 :(得分:0)

找到了这个https://stackoverflow.com/a/25987204/4376612帖子的解决方案。解决了我的问题。必须使用以下代码,

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