iOS application UITableView left sliding custom options and the implementation of bulk deletion

  • 2020-05-19 05:55:39
  • OfStack

Implement the UITableView left slide customization option
When UITableView is in edit mode, the Delete button will appear by default on the right side of cell when it is sliding left. How to customize the button when it is sliding left?

You just need to implement the proxy method below UITableView.

- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
    UITableViewRowAction *likeAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@" like " handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
      // Implement the relevant logic code
      // ...
      // In the last hope cell You can automatically go back to the default, so you need to exit edit mode
      tableView.editing = NO;
    }];     UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@" delete " handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
      // First change model
      [self.books removeObjectAtIndex:indexPath.row];
      // Then refresh view
      [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
      // No need to actively exit edit mode, update above view Will automatically exit the edit mode after the completion of the operation
    }];     return @[deleteAction, likeAction];

At this point, the left slide will appear two buttons, one is like, the other is deleted. The order of occurrence is related to the order of the elements in the array returned in this method.

If the above methods are implemented, the tableView:commitEditingStyle:forRowAtIndexPath: and tableView: titleForDeleteConfirmationButtonForRowAtIndexPath: methods mentioned earlier will no longer be called. (if you want to be compatible with previous versions, you need to implement the tableView:commitEditingStyle:forRowAtIndexPath: method, where you don't have to do anything.)

Multiple lines of UITableview are deleted simultaneously
The following code works with xib, but that's not the point. Remember the delegate used later.

The essence is the deletion of the array array.

//  UITableViewDelteMutilRowsViewController.m
//  UITableViewDelteMutilRows
#import "UITableViewDelteMutilRowsViewController.h" @implementation UITableViewDelteMutilRowsViewController
@synthesize tableview;
@synthesize dataArray;
@synthesize deleteDic;
@synthesize leftButton;
@synthesize rightButton;
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad {
    [super viewDidLoad];
    dataArray = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",nil];
    deleteDic = [[NSMutableDictionary alloc] init];     rightButton.title = @" The editor ";
} - (IBAction)choseData{
    if (rightButton.title == @" The editor ") {
        rightButton.title = @" determine ";
        [self.tableview setEditing:YES animated:YES];
    else {
        rightButton.title = @" The editor ";
        [deleteDic removeAllObjects];
        [self.tableview setEditing:NO animated:YES];
    } }
- (IBAction)deleteFuntion{
    [dataArray removeObjectsInArray:[deleteDic allKeys]];
    [self.tableview deleteRowsAtIndexPaths:[NSArray arrayWithArray:[deleteDic allValues]] withRowAnimation:UITableViewRowAnimationFade];
    [deleteDic removeAllObjects];
} - (void)dealloc {
    [leftButton release];
    [rightButton release];
    [deleteDic release];
    [dataArray release];
    [tableview release];
    [super dealloc];
#pragma mark -
#pragma mark Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return [dataArray count];
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    // Configure the cell...
    cell.textLabel.text = [dataArray objectAtIndex:indexPath.row];
    return cell;
/*// This is set to slide edit delete
 // Override to support conditional editing of the table view.
 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
 // Return NO if you do not want the specified item to be editable.
 return YES;
 */ - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
    return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
} #pragma mark -
#pragma mark Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (rightButton.title== @" determine ") {
        [deleteDic setObject:indexPath forKey:[dataArray objectAtIndex:indexPath.row]];  
    else {
} - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
    if (rightButton.title == @" determine ") {
        [deleteDic removeObjectForKey:[dataArray objectAtIndex:indexPath.row]];

Related articles: