Lors de l’édition, `UITableView` n’appelle pas didSelectRowAtIndexPath ??

J’ai un UITableViewController où l’utilisateur doit pouvoir modifier les éléments. Pour activer l’édition, j’utilise ceci:

 self.navigationItem.rightBarButtonItem = self.editButtonItem; 

Pour tous ceux qui ne savent pas d’où vient self.editButtonItem, il est prédéfini par le SDK.

Donc, maintenant, quand j’appuie sur n’importe quel élément, cette méthode s’appelle:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

mais dès que j’appuie sur le bouton d’édition et que l’édition est active, cette méthode ne semble pas avoir été appelée.

Une idée de ce qui me manque?

Ceci est le rest du code lié à l’édition:

 // 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 UITableViewCellEditingStyleNone; } - (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath { return NO; } 

Merci pour l’aide.

mcb

Vous devez définir la propriété allowSelectionDuringEditing de UITableView sur true.

Référence: UITableView – allowSelectionDuringEditing

Est-ce que vous définissez self.editing = YES lorsque vous self.editing = YES le bouton d’édition?

En mode édition, cette méthode est appelée, au lieu de didSelectRow lorsque vous appuyez sur une ligne:

 tableView:commitEditingStyle:forRowAtIndexPath:. 

J’ai résolu ce problème autrement. Mon bouton Modifier était sur ma propre barre de navigation et c’était la raison pour laquelle il n’a pas été appelé. Après avoir intégré VC dans le contrôleur de navigation et mis le nouveau bouton Modifier dans son élément de navigation, le bouton Modifier a commencé à être appelé.

mais dès que j’appuie sur le bouton d’édition et que l’édition est active, cette méthode ne semble pas avoir été appelée.

Une idée de ce qui me manque?

Oui. Vous attendez tableView:didSelectRowAtIndexPath: à appeler lorsqu’un bouton de votre barre de navigation est appuyé. Cela n’arrivera jamais. Cette méthode est appelée uniquement lorsqu’une ligne est sélectionnée.

Lorsque vous appuyez sur le bouton d’édition, vous souhaiterez mettre votre table en mode édition. Dans votre vue controller:

 - (void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated:animated]; // must be called first according to Apple docs [self.tableView setEditing:editing animated:animated]; } 

Ensuite, vous gérez les événements d’édition en ajoutant une tableView:commitEditingStyle:forRowAtIndexPath: méthode.