iOS UITableView左滑删除单元格

释放双眼,带上耳机,听听看~!

关于左滑删除这块,相信不少朋友都遇到过。UITableView自定一个左滑的按钮可以自定义,但是越来越多的需求左滑时要实现多个功能。

关于功能的实现,需要注意的是,所有关于tableview的操作如果影响到了页面cell的显示,通通遵循一个原则,就是先改数据,后变UI。另外关于置顶,不能单纯交换需要置顶项和第一项的数据;而是将需要置顶项插入到最前面。然后弹窗输入信息修改人物名字这块,简单示范了一下iOS9之后才出的UIAlertController的用法。此处有一个小细节就是点击了置顶之后,理想状态是该项移动到顶部之后滑出的菜单自动收回,之前没注意用的GCD延时利用[tableview reloadData],但是显示不太友好,可以在置顶操作之后加上[tableview setEditing:NO];

完整实现代码

 -(NSArray*)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath

{

    // delete action

    UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@" 删除  "handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)

                                          {

                                              [tableView setEditing:NO animated:YES];  // 这句很重要,退出编辑模式,隐藏左滑菜单

//                                              [self removeNotificationAction:index];

                                              XYLog(@"删除了第%ld单元格",indexPath.row);

                                              //删除对应行单元格数据

                                              [self.dataSource removeObjectAtIndex:indexPath.row];

                                          }];

    deleteAction.backgroundColor = RGBA(234, 85, 4, 1);

    return @[deleteAction];

}

另外tableview 每个cell的分割线其实是可以调整长度的。比如说让线条从最左边到最右边
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
 
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}

 

好了,就是这些。

人已赞赏
iOS文章

iOS Label文字自适应高度自适应

2020-2-22 20:30:56

iOS文章

iOS 修改工程名字-APP贴牌必备

2020-2-22 22:32:10

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索