iOS 8 以上实现 TableViewCell 左滑菜单功能

Posted by Calvin on 2017-04-20

很多情况下的 UITableViewCell 需要实现左滑菜单功能,类似微信的左滑菜单栏,正好现在的新项目是只支持 iOS 8 以上的,所以以系统 API 来实现下这个需求。

1、初始化 TableView 和 Cell 数据

2、实现 UITableViewDataSource 的 @optional 方法,设置 tableView 为可编辑。

// 设置table view 为可编辑的
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
return YES;
}
// 设置可编辑的样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewCellEditingStyleDelete;
}

3、实现 UITableViewDelegate 的 @optional 方法。手动添加菜单数组,默认从右至左添加。自定义菜单名称和菜单颜色,并实现菜单的对应方法。

#pragma mark --
#pragma mark -- 按钮的点击事件
- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewRowAction *deleteRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
NSLog(@"点击了删除");
//1.更新数据
[self.dataArr removeObjectAtIndex:indexPath.row];
//2.更新UI
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}];
UITableViewRowAction *moreRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"关注" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
NSLog(@"点击了关注");
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}];
UITableViewRowAction *topRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"置顶" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
NSLog(@"你点击了置顶按钮");
NSString *title = [self.dataArr objectAtIndex:indexPath.row];
[self.dataArr removeObject:title];
[self.dataArr insertObject:title atIndex:0];
[tableView reloadData];
}];
moreRowAction.backgroundEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
topRowAction.backgroundColor = [UIColor grayColor];
return @[deleteRowAction,moreRowAction,topRowAction];
}

附:『点击下载Demo』