Search code examples
ioscocoa-touchuitableviewuikit

UITableView disable swipe to delete, but still have delete in Edit mode?


I want something similar as the Alarm app, where you can't swipe delete the row, but you can still delete the row in Edit mode.

When commented out tableView:commitEditingStyle:forRowAtIndexPath:, I disabled the swipe to delete and still had Delete button in Edit mode, but what happens when I press the Delete button. What gets called?


Solution

  • Ok, it turns out to be quite easy. This is what I did to solve this:

    Objective-C

    - (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // Detemine if it's in editing mode
        if (self.tableView.editing)
        {
            return UITableViewCellEditingStyleDelete;
        }
    
        return UITableViewCellEditingStyleNone;
    }
    

    Swift 2

    override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
        if tableView.editing {
             return .Delete
        }
    
        return .None
    }
    

    Swift 3

    override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
        if tableView.isEditing {
            return .delete
        }
    
        return .none
    }
    

    You still need to implement tableView:commitEditingStyle:forRowAtIndexPath: to commit the deletion.