UITableView 自带编辑删除

来源:互联网 发布:gta5官网开放mac版 编辑:程序博客网 时间:2024/05/14 16:37

一:UITableView 自带编辑删除

1:实现两个方法即可

 

 

#pragma mark tableView自带的编辑功能

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

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

if (editingStyle!=UITableViewCellEditingStyleDelete) {

return ;

}

_attentionTableView.editing = !_attentionTableView.editing;

 

//删除店铺收藏

[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:方法,在这个方法里什么都不用做即可。)


0 0
原创粉丝点击