Mam kilka widoków tabel w mojej aplikacji. Jestem zaznajomiony z typowym zachowaniem tabel, który po wybraniu wiersza i przejściu do widoku pchanego zmienia kolor na niebieski, a po powrocie pozostaje niebieski przez ułamek sekundy, a następnie zmienia kolor na biały, aby powiadomić użytkownika. z tego, który rząd został właśnie wybrany.UITableView nie zachowuje wiersza wybranego po powrocie
To działało idealnie, aż do niedawna, kiedy zauważyłem, że nie zrobił ostatni kawałek co opisałem: to nie była niebieska do tego ułamek sekundy ...
nie mam pojęcia dlaczego, ale po czytając kilka pokrewnych postów na tej stronie zdałem sobie sprawę, że fragment kodu, który się nazywał, jest w metodzie "viewDidAppear". To, co mnie myli, to to, że nie zastępuję tej metody, ale testowałem ją przy pomocy NSLog, aby pokazać mi ścieżkę indeksu dla wiersza, którego powinien on odznaczyć, który powrócił (null).
Prowadzi mnie to do wniosku, że tableView przedwcześnie odznacza wiersz.
Poniżej jest moja metoda didSelectRowForIndexPath:
- (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];
}
Każda pomoc jest mile widziana, thanks :)
EDIT: Fixed
mam to działa .... Wydaje I wywołał metodę [self.tableView reloadData] w mojej metodzie viewWillAppear, która spowodowała odznaczenie wszystkich komórek w tabeli. Poniżej znajduje się moja zmodyfikowana metoda viewDidLoad. Dzięki za sugestie!
- (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];
}
Strzał w ciemności: Być może poprzedni kontroler widoku jest rozładowany z powodu zużycia pamięci. Może to prowadzić do tego zachowania. – dasdom