一: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进入编辑模式
,在进行左滑操做
的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:
方法,在这个方法里什么都不用作便可。)