做项目中遇到一个小问题,给大家分享一下
以前做删除是这样,实现UITableView的代理方法即可
// 设Cell编辑
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
// 定义编辑样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleDelete;
}
// 进入编辑模式,进行删除操作
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source.
}
}
// 修改编辑按钮文字
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
return @"删除";
}
OK 上面可以,但是因为项目支持iOS8.0以上,并且需要左滑删除和重命名两种编辑模式,所以我选用了IOS8.0以后的新代理方法
-(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewRowAction *renameRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"重命名" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
// 重命名操作
}];
UITableViewRowAction *deleteRoWAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
// 删除操作
}];
return @[deleteRoWAction,renameRowAction];
}
这时候侧滑,iOS8真机直接侧滑没有反应,调试显示没走新代理方法(iOS9以上真机木有问题)。哎 说好的支持iOS8.0以上呢?
解决办法:
很简单就是把旧的代理方法写上就OK,里面什么也不做
// 进入编辑模式,进行删除操作
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
}
应该是iOS8.0中 若旧的代理方法没有实现,然后就调用新的代理方法