美文网首页
iOS11 TableView左滑删除无线拉伸

iOS11 TableView左滑删除无线拉伸

作者: 114105lijia | 来源:发表于2019-04-04 10:15 被阅读0次

    说起TableView的左滑删除,大家都知道用下面几个方法实现。

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

        return YES;

    }

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

        return UITableViewCellEditingStyleDelete;

    }

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

        return @"Delete";

    }

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

                //执行删除操作

                //TODO    注意先调用删除接口,在执行remove操作,不然可能会崩溃。

                 [_dataArray removeObjectAtIndex:indexPath.row];

                [_tableView reloadData];

    }

    - (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {

        MINISOQAS_InspectionTaskList_TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inspectionTaskListTableViewCellIdentifier forIndexPath:indexPath];

        //注意在滑动删除时,最好加上_dataArray.count> indexPath.row这个判断,不然也有肯能会闪退

        if(_dataArray.count> indexPath.row) {

            [cellfillDataWithModel:_dataArray[indexPath.row]];

        }

        returncell;

    }

    但是在iOS11后,TableView左滑删除能无限拉伸,并自动执行commitEditingStyle方法,不能给用户提前给一个提示,可能导致用户一不小心就删除了,解决这个问题需要用到下面一个方法:


    - (UISwipeActionsConfiguration*)tableView:(UITableView*)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath*)indexPathAPI_AVAILABLE(ios(11.0)){

        if(@available(iOS11.0, *)) {

            MINISOWeakSelf;

            UIContextualAction*deleteAction = [UIContextualActioncontextualActionWithStyle:UIContextualActionStyleDestructivetitle:@"删除"handler:^(UIContextualAction*_Nonnullaction,__kindofUIView*_NonnullsourceView,void(^_NonnullcompletionHandler)(BOOL)) {

                // 这句很重要,退出编辑,隐藏左滑菜单

                [tableViewsetEditing:NOanimated:YES];

                //删除前先判断下,满不满足删除条件,如果不满足, completionHandler()返回false;该行就不会被删掉

                if(2>1) {

                    completionHandler(false);

                    [MBProgressHUDshowError:@"不能删除!"];

                }else{

                    completionHandler(true);    //删除该行

                    //删除前,临时记住所有数据,如果删除失败,可以复原数据

                    weakSelf.tempArray= [_dataArray mutableCopy];

                    [weakSelf deleteTaskWithIndexPath:indexPath];    //调用删除接口

    //                [weakSelf.dataArray removeObjectAtIndex:indexPath.row];    //这句写不写都可以

                    [weakSelf.tableViewreloadData];

                }

            }];

            UISwipeActionsConfiguration *actions = [UISwipeActionsConfiguration configurationWithActions:@[deleteAction]];

            // 禁止侧滑无线拉伸

            actions.performsFirstActionWithFullSwipe = NO;

            returnactions;

        }else{

            returnnil;

        }

    }

    该方法在iOS11之后才会执行,iOS11以前,不会出现左滑无限拉伸的问题,也就用不到了。

    iOS11以前滑动删除时,依次执行:canEditRowAtIndexPath、editingStyleForRowAtIndexPath、titleForDeleteConfirmationButtonForRowAtIndexPath、commitEditingStyle

    iOS11以后滑动删除时,依次执行:canEditRowAtIndexPath、editingStyleForRowAtIndexPath、trailingSwipeActionsConfigurationForRowAtIndexPath

    相关文章

      网友评论

          本文标题:iOS11 TableView左滑删除无线拉伸

          本文链接:https://www.haomeiwen.com/subject/zjaxiqtx.html