iPhone UITableView cellules séjour sélectionné
dans mon UITableView parfois, les cellules séjour sélectionné après de la toucher.
Car il arrive de temps en temps seulement, je ne suis pas en mesure de reproduire l'
problème.
Un indice? Peut-être qu'il a quelque chose à voir avec incorrect de la libération de la tableView?
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSUInteger row = [indexPath row];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
switch (row) {
case 0:
FruitViewController *fruitController = [FruitViewController alloc];
[fruitController retain];
[fruitController initWithNibName:@"FruitView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:fruitController animated:YES];
[fruitController release];
break;
case 1:
CerealsViewController *cerealsController = [CerealsViewController alloc];
[cerealsController retain];
[cerealsController initWithNibName:@"CerealsView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:cerealsController animated:YES];
[cerealsController release];
break;
default:
break;
}
}
- Peut-être que vous remplacer viewWillAppear:animation sans appel [super viewWillAppear:animation] ?
Vous devez vous connecter pour publier un commentaire.
Je ne peux pas vous dire pourquoi vous voyez la question, mais voici quelques suggestions de correction:
Selon l'Apple HIG, la sélection ne doit pas disparaître jusqu'à ce que le retour de la vue-contrôleur juste poussé sur la pile. Si votre contrôleur est juste un UITableViewController, il désactivez automatiquement lors du retour à la vue. Si non, ajouter
quelque part dans le point de vue du contrôleur.
Si il y a des lignes qui, lorsque vous cliquez dessus, ne pas aller à un autre point de vue, et de ne pas faire quelque chose lorsqu'il est sélectionné, ils ne devraient pas être sélectionnables, de sorte que vous pouvez remplacer que dans
et retour
nil
dans le cas que la ligne ne doit pas être sélectionné.Une cause possible est primordial
-viewWillAppear:animated:
sans appel[super viewWillAppear]
dans un contrôleur qui s'étendUITableViewController
. L'ajout de[super viewWillAppear:animated]
au début de votre-viewWillAppear
méthode peut corriger le problème.Juste de s'étendre sur les "Ed Marty"s réponse, j'ai choisi d'ajouter de la désélectionner dans le "viewWillDisappear" méthode au lieu de cela parce que je pensais qu'il avait l'air plus agréable.
En outre, j'ai été en utilisant un UITableView régulière d'un UIViewController (plutôt que d'un UITableViewController) de sorte que la tableView variable n'était pas disponible pour moi. Pour pallier à cela j'ai ajouté un tableView propriété, à mon avis, les contrôleurs de fichier d'en-tête (et dans mon fichier XIB j'ai branché le réel de la table vue de la propriété)...
...et à la vue des contrôleurs de la mise en œuvre câblé la propriété et effectué le désélectionner comme suit..
Si vous utilisez un UITableViewController vous pouvez utiliser:
Dans mon cas , je désélectionner la cellule à droite à la fin de didSelectRowAtIndexPath :
Utiliser cette méthode dans votre
UITableViewCell
classeou même vous, vous pouvez essayer ce code dans didSelectRowAtIndexPath méthode
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Faire des trucs quand la ligne est sélectionnée
}
Résoudre cela prend environ deux secondes une fois que vous apprendre les tables sont gérés.
Dès que les cellules sont défile hors de l'écran, ils perdent de leur mise en forme. Le tableau qui minimise l'utilisation de la mémoire, en rejetant les autres cellules et de recréer eux si/lorsque l'utilisateur de revenir en arrière.
Même des choses comme le rechargement des données de la table, qui s'applique seulement pour les cellules à l'écran à ce moment-là. Point étant, la cellForRowAtIndexPath pourrait créer la même cellule à cinq reprises sans que l'utilisateur ne jamais appuyer sur un bouton ou en laissant la vue-contrôleur! Afin de le configurer pour recharger toute la mise en forme. Ajouter quelque chose comme cela pour cellForRowAtIndexPath: