234 votes

Comment désélectionner une cellule UITableView sélectionnée ?

Je travaille sur un projet dans lequel je dois présélectionner une cellule particulière.

Je peux présélectionner une cellule en utilisant -willDisplayCell mais je ne peux pas la désélectionner lorsque l'utilisateur clique sur une autre cellule.

- (void)tableView:(UITableView*)tableView 
        willDisplayCell:(UITableViewCell*)cell
        forRowAtIndexPath:(NSIndexPath*)indexPath
{ 
    AppDelegate_iPad *appDelegte = 
      (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];

    if ([appDelegte.indexPathDelegate row] == [indexPath row])
    {
        [cell setSelected:YES];    
    } 
}

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

    AppDelegate_iPad *appDelegte = 
      (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];

    NSIndexPath *indexpath1 = appDelegte.indexPathDelegate;
    appDelegte.indexPathDelegate = indexPath;
    [materialTable deselectRowAtIndexPath:indexpath1 animated:NO];
}

Pouvez-vous nous aider ?

11 votes

Cette question doit avoir une réponse acceptée

436voto

Saikiran Points 1998

Utiliser ce code

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
 {
    //Change the selected background view of the cell.
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
 }

Swift 3.0 :

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    //Change the selected background view of the cell.
    tableView.deselectRow(at: indexPath, animated: true)
}

1 votes

Il existe un didDeselectRowAtIndexPath à utiliser pour désélectionner le précédent.

3 votes

J'aime à penser que je ne peux pas upvoter ce message parce que cela provoquerait un dépassement d'entier :)

1 votes

Bonjour @ram, vous devez sélectionner une réponse à cette question.

119voto

Shamitha Points 818

Utilisez la méthode suivante dans le délégué de la vue tableau didSelectRowAtIndexpath (Ou de n'importe où)

[myTable deselectRowAtIndexPath:[myTable indexPathForSelectedRow] animated:YES];

2 votes

Il convient de noter que indexPathForSelectedRow est une méthode et non une propriété.

0 votes

Super ! Je ne savais pas pour [myTable indexPathForSelectedRow] . Je parcourais les cellules en boucle avant. Merci !

0 votes

@FreeAsInBeer Cette distinction est-elle importante ? Les accesseurs de propriété sont des méthodes.

40voto

ikosdroid Points 251

Essayez ça :

for (NSIndexPath *indexPath in tableView.indexPathsForSelectedRows) {
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

1 votes

Bon travail... Je pense que "index" sur la 2ème ligne devrait être "indexPath".

0 votes

Cette fonction n'est pas prise en charge sous iOS 11 Swift 4

28voto

jfalexvijay Points 1860

Veuillez vérifier avec la méthode du délégué si c'est correct ou non. Par exemple ;

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

pour

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

0 votes

J'ai appelé la mauvaise méthode pendant tout ce temps, arghh !! Merci !

1 votes

Oh man.... maudite autocomplétion !!! Il m'a fallu plusieurs heures pour le comprendre !!! OMG...je veux t'embrasser !

6voto

Jordan Points 14134

Cela devrait fonctionner :

[tableView deselectRowAtIndexPath:indexpath1 animated:NO];

Assurez-vous simplement que materialTable et tableView pointent vers le même objet.

Les matériaux sont-ils connectés au tableView dans Interface Builder ?

0 votes

J'ai testé avec NO mais cela ne résout pas non plus mon problème. Mais j'ai résolu ce problème d'une autre manière en rechargeant les données lorsque le délégué didselect est activé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X