UITableView ne conserve pas la ligne sélectionnée lors du retour
j'ai plusieurs vues de table dans mon application. Je suis familier avec le comportement habituel des tables, que lorsque vous sélectionnez une ligne et de passer à une poussée de vue, il turnes bleu, puis quand vous revenez il reste en bleu pour une fraction de seconde, puis disparaît à blanc, afin d'informer l'utilisateur de ce ligne a été sélectionné.
Cela a parfaitement fonctionné jusqu'à récemment, lorsque j'ai remarqué qu'il n'est plus fait dans le dernier peu de ce que j'ai décrit: il n'est pas resté bleu pour une fraction de seconde...
Je n'ai aucune idée pourquoi, mais après avoir lu quelques posts sur ce site, je me suis rendu compte que le morceau de code qui est appelé est dans le "viewDidAppear" la méthode. Ce qui me confond, c'est que je n'ai pas surcharger cette méthode, mais je n'ai tester avec un NSLog pour me montrer le chemin d'index de la ligne qu'il doit désélectionner, qui est retourné (null).
Donc, c'est ce qui m'a croire qu'en quelque sorte, la tableView est prématurément en décochant la ligne.
Ci-dessous est mon didSelectRowForIndexPath méthode:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"Selected row at index path: %@", indexPath);
//setting our view controller as what we want
TripDetails *detailViewController = [[TripDetails alloc] initWithNibName:@"TripDetails" bundle:nil];
self.tripsDetailViewController = detailViewController;
[detailViewController release];
//Pass the selected object to the new view controller.
NSLog(@"Passing trip...");
self.tripsDetailViewController.selectedTrip = [fetchedResultsController objectAtIndexPath:indexPath];
//Hide the bottom bar on pushed view
tripsDetailViewController.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:tripsDetailViewController animated:YES];
}
Toute aide est grandement appréciée, merci 🙂
EDIT: Fixe
J'ai eu de travail.... Semble que j'avais de l'appel de la [self.tableView reloadData] méthode dans mon viewWillAppear méthode qui a ensuite provoqué la table pour désélectionner toutes les cellules. Ci-dessous mon modifiée de la méthode viewDidLoad. Merci pour les suggestions!
- (void)viewWillAppear:(BOOL)animated
{
NSLog(@"running viewWIllAppear for TripsTable");
//Getting indexpath for highlighened cell, to rehighlight
NSIndexPath *selectedIndex = [self.tableView indexPathForSelectedRow];
//Refreshing Table - Implement an if statement on the condition that the data has changed
[self viewDidLoad];
[self.tableView reloadData];
//Re select cell
[self.tableView selectRowAtIndexPath:selectedIndex animated:NO scrollPosition:UITableViewScrollPositionNone];
[super viewWillAppear:animated];
}
source d'informationauteur Sonypop
Vous devez vous connecter pour publier un commentaire.
Son une fonctionnalité que vous pouvez désactiver.
Dans le UITableViewController vous pouvez appeler
C'est directement à partir du fichier "UITableViewController.h". Cette fonction est documentée.
Essayer
[tableView deselectRowAtIndexPath:indexPath animated:NO];
pour désélectionner une ligne et
pour la mise en évidence de la ligne sélectionnée.
apparemment
viewWillAppear:
de la classe UITableView ne désélectionner toutes les cellules, même sans avoir à recharger les cellules. L'astuce décrite fonctionné pour moi:code de mon UITablViewController:
Utiliser ce bout de code à la fin de didSelectRowAtIndexPath méthode du délégué de la vue de la table,
utilisez la variable globale pour stocker sélectionné dans la vue de table délégué méthode
et dans le suivant, délégué de
UINavigationController
délégué méthodeJe ne suis pas sûr si cela est pertinent, mais il y a un drapeau dans UITableViewController je viens de remarquer appelé
Je pense que cela devrait résoudre certains des problèmes que les gens sont de décrire ici.
Le code suivant ne fonctionne Bien