很多情况下的 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』