Existe-t-il un moyen de masquer le bouton «-» (Supprimer) lors de l'édition de UITableView

97

Sur mon application iPhone, j'ai un UITableView en mode édition, où l'utilisateur n'est autorisé qu'à réorganiser les lignes sans autorisation de suppression.

Alors, y a-t-il un moyen de cacher le bouton rouge "-" de TableView. S'il vous plaît, faites-moi savoir.

Merci

iPhoneDev
la source

Réponses:

258

Voici ma solution complète, sans indentation (0left align) de la cellule!

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellEditingStyleNone; 
}

- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}


- (BOOL)tableView:(UITableView *)tableview canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}
Stefan von Chossy
la source
43

Swift 3 équivaut à la réponse acceptée avec juste les fonctions nécessaires:

func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool {
    return false
}

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
    return .none
}
Antoine
la source
4

Cela arrête l'indentation:

- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}
sethtc
la source
3

J'ai rencontré un problème similaire où je voulais que des cases à cocher personnalisées apparaissent en mode Edition mais pas le bouton de suppression '(-)'.

Réponse de Stefan m'a orienté dans la bonne direction.

J'ai créé un bouton bascule et l'ai ajouté en tant qu'accessoire d'édition à la cellule et l'ai câblé à une méthode.

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

    ....
    // Configure the cell...

    UIButton *checkBoxButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 40.0f, 32.0f)];
    [checkBoxButton setTitle:@"O" forState:UIControlStateNormal];
    [checkBoxButton setTitle:@"√" forState:UIControlStateSelected];
    [checkBoxButton addTarget:self action:@selector(checkBoxButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

    cell.editingAccessoryType = UITableViewCellAccessoryCheckmark;
    cell.editingAccessoryView = checkBoxButton;

    return cell;
}

- (void)checkBoxButtonPressed:(UIButton *)sender {
    sender.selected = !sender.selected;
}

Implémentation de ces méthodes de délégation

- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleNone;
}
srik
la source
0

Lorsque vous souhaitez uniquement masquer le point (-) lors de l'édition, mais que vous souhaiterez peut-être conserver la fonctionnalité de suppression pour les utilisateurs, vous l'implémentez ainsi dans votre UITableViewDelegateclasse de conformité de protocole

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.editing) return UITableViewCellEditingStyleNone;
    return UITableViewCellEditingStyleDelete;
}
Ol Sen
la source