在没有删除按钮的情况下重新排序表视图单元格,并实现滑动以删除行

时间:2015-08-02 13:34:53

标签: objective-c uitableview editing

我读到了关于表格视图及其编辑样式但我遇到了一些问题,因为只有三种编辑风格如下:

  1. UITableViewCellEditingStyleNone
  2. UITableViewCellEditingStyleDelete
  3. UITableViewCellEditingStyleInsert
  4. 我想重新排序我使用它的委托成功实现的tableview单元格。

    -(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ 
        return YES;
    }
    
    -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
       return UITableViewCellEditingStyleNone;
    }
    -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
       //handle the editing style
    }
    -(NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath{
      //move cells
    }
    -(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath{
        return YES;
    }
    

    我不想使用UITableViewCellEditingStyleDelete,因为它在表格视图中显示了一个红色的圆形按钮。而不是这个,我想要一起刷卡到删除和重新排序功能。

    有没有办法实现这个?

1 个答案:

答案 0 :(得分:1)

这可以通过以下条件完成。只有在编辑模式下表视图时,滑动到删除才会起作用,并且只有在编辑模式下表视图 时,表重新定位才有效。您无法在表格重新订购的同时进行滑动删除工作。

要完成这项工作,您需要以下内容:

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

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
   // Only allow deletion when the table isn't being edited
   return tableView.isEditing ? UITableViewCellEditingStyleNone : UITableViewCellEditingStyleDelete;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
   // handle the row deletion
}

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
    // Check if move is valid
    return proposedDestinationIndexPath;
}

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

- (void)tableView:(UITableView * nonnull)tableView moveRowAtIndexPath:(NSIndexPath * nonnull)fromIndexPath toIndexPath:(NSIndexPath * nonnull)toIndexPath {
    // process the moved row
}

您需要导航栏中的标准“编辑”按钮(或以其他方式切换表格的编辑模式)。执行此操作的常用方法是在表视图控制器的viewDidLoad方法中添加以下行:

self.navigationItem.rightBarButtonItem = [self editButtonItem];