UITableView 自带编辑删除

一:UITableView 自带编辑删除json

1:实现两个方法便可数组

 

 

#pragma mark tableView自带的编辑功能ui

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

//方法实现后,默认实现手势滑动删除的方法代理

if (editingStyle!=UITableViewCellEditingStyleDelete) {code

return ;orm

}事件

_attentionTableView.editing = !_attentionTableView.editing;ci

 

//删除店铺收藏unicode

[goods_bll deleteCollectShopWithStoreId:[collectShopAry[indexPath.row] objectForKey:@storeId] andUid:userUidStr success:^(id json) {

[self getCollectShop];

} faile:^{

}];

}

#pragma mark 选择编辑的样式

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{

return UITableViewCellEditingStyleDelete;//手势滑动删除

}

 

2:实现这两个方法实现自带的删除,此时删除按钮为英文delete ,若是想改变内容,变成中文删除或是别的内容,须要实现下面的方法

 

#pragma mark 中引文转换-delete

-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{

return @删除;

}

3:

**

* tableView:editActionsForRowAtIndexPath: // 设置滑动删除时显示多个按钮

* UITableViewRowAction // 经过此类建立按钮

* 1. 咱们在使用一些应用的时候,在滑动一些联系人的某一行的时候,会出现删除、置顶、更多等等的按钮,在iOS8以前,咱们都须要本身去实现。But,到了iOS8,系统已经写好了,只须要一个代理方法和一个类就搞定了

* 2. iOS8的协议多了一个方法,返回值是数组的tableView:editActionsForRowAtIndexPath:方法,咱们能够在方法内部写好几个按钮,而后放到数组中返回,那些按钮的类就是UITableViewRowAction

* 3. 在UITableViewRowAction类,咱们能够设置按钮的样式、显示的文字、背景色、和按钮的事件(事件在Block中实现)

* 4. 在代理方法中,咱们能够建立多个按钮放到数组中返回,最早放入数组的按钮显示在最右侧,最后放入的显示在最左侧

* 5. 注意:若是咱们本身设定了一个或多个按钮,系统自带的删除按钮就消失了...

*/

 

#pragma mark 在滑动手势删除某一行的时候,显示出更多的按钮

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath

{

 // 添加一个删除按钮

 UITableViewRowAction *deleteRowAction = [UITableViewRowActionrowActionWithStyle:UITableViewRowActionStyleDestructive title:@删除handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

 NSLog(@点击了删除);

 // 1. 更新数据

 [_allDataArray removeObjectAtIndex:indexPath.row];

 // 2. 更新UI

 [tableView deleteRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationAutomatic];

 }];

 // 删除一个置顶按钮

 UITableViewRowAction *topRowAction = [UITableViewRowActionrowActionWithStyle:UITableViewRowActionStyleDefault title:@置顶handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

 NSLog(@点击了置顶);

 // 1. 更新数据

 [_allDataArray exchangeObjectAtIndex:indexPath.row withObjectAtIndex:0];

 // 2. 更新UI

 NSIndexPath *firstIndexPath = [NSIndexPath indexPathForRow:0inSection:indexPath.section];

 [tableView moveRowAtIndexPath:indexPathtoIndexPath:firstIndexPath];

 }];

 topRowAction.backgroundColor = [UIColor blueColor];

 // 添加一个更多按钮

 UITableViewRowAction *moreRowAction = [UITableViewRowActionrowActionWithStyle:UITableViewRowActionStyleNormal title:@更多handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

 NSLog(@点击了更多);

 [tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle];

 }];

 moreRowAction.backgroundEffect = [UIBlurEffecteffectWithStyle:UIBlurEffectStyleDark];

 // 将设置好的按钮放到数组中返回

 return @[deleteRowAction, topRowAction, moreRowAction];

}



实现UITableView左滑自定义选项

字数329  阅读1484  评论2 

当UITableView进入编辑模式,在进行左滑操做的cell的右边,默认会出现Delete按钮,如何自定义左滑出现的按钮呢?

只须要实现UITableView下面的这个代理方法。

- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{    UITableViewRowAction *likeAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"喜欢" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {      // 实现相关的逻辑代码
      // ...
      // 在最后但愿cell能够自动回到默认状态,因此须要退出编辑模式
      tableView.editing = NO;
    }];    UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {      // 首先改变model
      [self.books removeObjectAtIndex:indexPath.row];      // 接着刷新view
      [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];      // 不须要主动退出编辑模式,上面更新view的操做完成后就会自动退出编辑模式
    }];    return @[deleteAction, likeAction];
}

此时左滑就会出现两个按钮,一个是喜欢,另外一个是删除。出现的顺序和在这个方法中返回的数组中的元素顺序相关。

若是实现了上述方法,那么以前提到过的tableView:commitEditingStyle:forRowAtIndexPath:tableView: titleForDeleteConfirmationButtonForRowAtIndexPath:方法就不会再调用了。(若是为了兼容之前的版本,那么须要实现tableView:commitEditingStyle:forRowAtIndexPath:方法,在这个方法里什么都不用作便可。)