zoukankan      html  css  js  c++  java
  • iOS开发技术之实现tableView左滑删除的三种操作方式

    第一种方式(普通):

    // 定义编辑样式

    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

        

        return UITableViewCellEditingStyleDelete;

    }

     

    // 进入编辑模式,按下出现的编辑按钮后,进行删除操作

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

        

        //获取模型

        SubDevice* subDevModel=self.subDeviceArray[indexPath.row];

        

        if (editingStyle == UITableViewCellEditingStyleDelete) {

            

            UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"是否确定删除?" preferredStyle:UIAlertControllerStyleAlert];

            

            UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

                //请求接口,删除数据

                //[self loadForDeleteTimingTaskData];

                

                //删除数据,并刷新列表

                [self.subDeviceArray removeObject:subDevModel];

                [self.tableView reloadData];

                

            }];

            UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

                NSLog(@"点击了取消");

            }];

            

            [alert addAction:action1];

            [alert addAction:action2];

            

            [self presentViewController:alert animated:YES completion:nil];

            

        }

    }

     

    //添加编辑模式

    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{

        

        return YES;

    }

     

    // 修改编辑按钮文字

    - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {

        

        return @"删除";

    }

     

    //设置进入编辑状态时,Cell不会缩进

    - (BOOL)tableView: (UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath{

        

        return NO;

    }

     

     

    第二种方式(iOS8 API):

    //让tableView可编辑

    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath

    {

        return YES;

    }

     

    - (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {

        

        //添加一个删除按钮

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

            

            //先删数据 再删UI

            [self.subDeviceArray removeObjectAtIndex:indexPath.row];

            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

            [tableView reloadData];

            

        }];

        

        //添加一个置顶按钮

        UITableViewRowAction *topAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"置顶" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {

     

            SubDevice* subDevModel=self.subDeviceArray[indexPath.row];

            

            [self.subDeviceArray removeObjectAtIndex:indexPath.row];

            [self.subDeviceArray insertObject:subDevModel atIndex:0];

            [tableView moveRowAtIndexPath:indexPath toIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];

     

            [tableView setEditing:NO];

            [tableView reloadData];

            

        }];

        topAction.backgroundColor = [UIColor blueColor];

        

        //添加一个编辑按钮

        UITableViewRowAction *editAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"修改" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {

            

            SubDevice* subDevModel=self.subDeviceArray[indexPath.row];

            //弹窗输入名字

            UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"修改" message:@"请输入新名字" preferredStyle:UIAlertControllerStyleAlert];

            [alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {

                

                textField.placeholder = @"此处输入名字";

                textField.clearButtonMode = UITextFieldViewModeWhileEditing;

                textField.borderStyle = UITextBorderStyleRoundedRect;

            }];

            

            [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

                

                [tableView setEditing:NO];

            }]];

            

            [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

                

                UITextField *textfield = alert.textFields.firstObject;

                NSString *newName = textfield.text;

                if (newName == nil) {

                    

                    newName = @"";

                }

                subDevModel.name = newName;

                [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

                [tableView reloadData];

                

            }]];

            

            [self presentViewController:alert animated:YES completion:nil];

        }];

        editAction.backgroundColor = [UIColor greenColor];

        

        return @[deleteAction, topAction, editAction];

    }

     

     

    第三种方式(iOS11 API):

    //iOS11后的新方法,使用tableView左滑删除cell

    -(UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath{

        

        //获取模型

        SubDevice* subDevModel=self.subDeviceArray[indexPath.row];

        

        //删除

        if (@available(iOS 11.0, *)) {

            

            UIContextualAction* deleteRowAction=[UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:@"删除" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {

                

                UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"是否确定删除?" preferredStyle:UIAlertControllerStyleAlert];

                

                UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

                    //请求接口,删除数据

                    //[self loadForDeleteTimingTaskData];

                    

                    //删除数据,并刷新列表

                    [self.subDeviceArray removeObject:subDevModel];

                    [self.tableView reloadData];

                    

                }];

                UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

                    NSLog(@"点击了取消");

                }];

                

                [alert addAction:action1];

                [alert addAction:action2];

                

                [self presentViewController:alert animated:YES completion:nil];

                

            }];

            

            UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[deleteRowAction]];

            

            return config;

            

        } else {

            // Fallback on earlier versions

            return nil;

        }

    }

     

  • 相关阅读:
    一键编译go文件命令.bat
    安装go语言,配置环境及IDE,只需3步
    Mysql show Status常用参数详解
    LFS:kernel panic VFS: Unable to mount root fs
    LFS: Interface eth0 doesn't exist
    转:Xshell显示找不到匹配的outgoing encryption算法怎么办
    NTP-ntpdate:no server suitable for synchronization found
    linux/module.h: No such file or directory 内核模块编译过程
    ASCII码表完整版
    [Firmware Warn]: GHES: Failed to read error status block address for hardware error source
  • 原文地址:https://www.cnblogs.com/yuhao309/p/9497385.html
Copyright © 2011-2022 走看看