在UITableViewCell中向左或向右滑动以删除没有删除按钮的单元格?

时间:2012-01-30 06:11:18

标签: objective-c ios uitableview

我希望能够在表格视图单元格中的任何位置向左或向右滑动以删除带有动画的单元格而不显示删除按钮。我怎么能这样做?

4 个答案:

答案 0 :(得分:6)

我没有试过并实现过这个,但我会试一试。首先,创建一个自定义UITableViewCell,让它有2个你可以使用的属性

  1. 对正在使用的tableView的引用。
  2. 用于在tableView中查找单元格的indexPath。(注意,每次删除此更改的所有单元格的单元格时都需要更新)
  3. 在您创建自定义单元格的cellForRowAtIndexPath:中,设置这些属性。还要向单元格添加UISwipeGestureRecognizer

    cell.tableView=tableView;
    cell.indexPath=indexPath;
    UISwipeGestureRecognizer *swipeGestureRecognizer=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(deleteCell:)];
    [cell addGestureRecognizer:swipeGestureRecognizer];
    [swipeGestureRecognizer release];
    

    确保手势仅接收水平滑动。

    -(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
        if([[gestureRecognizer view] isKindOfClass:[UITableViewCell class]]&&
           ((UISwipeGestureRecognizer*)gestureRecognizer.direction==UISwipeGestureRecognizerDirectionLeft
            ||(UISwipeGestureRecognizer*)gestureRecognizer.direction==UISwipeGestureRecognizerDirectionRight)) return YES;
    }
    

    deleteCell:

    -(void) deleteCell:(UIGestureRecognizer*)gestureRec
    {
        UIGestureRecognizer *swipeGestureRecognizer=(UISwipeGestureRecognizer*)gestureRec;
        CustomCell *cell=[swipeGestureRecognizer view];
        UITableView *tableView=cell.tableView;
        NSIndexPath *indexPath=cell.indexPath;
        //you can now use these two to perform delete operation
    }
    

答案 1 :(得分:3)

@MadhavanRP发布的解决方案有效,但它比它需要的更复杂。您可以采用更简单的方法并创建一个手势识别器来处理表中发生的所有滑动,然后获取滑动的位置以确定用户刷过的单元格。

设置手势识别器:

- (void)setUpLeftSwipe {
    UISwipeGestureRecognizer *recognizer;
    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
                                                       action:@selector(swipeLeft:)];
    [recognizer setDirection:UISwipeGestureRecognizerDirectionLeft];
    [self.tableView addGestureRecognizer:recognizer];
    recognizer.delegate = self;
}

viewDidLoad

中调用此方法

要处理滑动:

- (void)swipeLeft:(UISwipeGestureRecognizer *)gestureRecognizer {
    CGPoint location = [gestureRecognizer locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
    ... do something with cell now that i have the indexpath, maybe save the world? ...
}

注意:你的vc必须实现手势识别器委托。

答案 2 :(得分:-1)

实施

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

这两个方法,如果UITableViewCellEditingStyle是UITableViewCellEditingStyleDelete,那么请用

删除你的单元格
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

就是这样。

答案 3 :(得分:-2)

为此你必须在你的项目中添加这个代码。

// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return YES if you want the specified item to be editable.
    return YES;
}

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //add code here for when you hit delete
    }    
}

其他信息你可以通过这个链接 enter link description here