Zgodnie z powyższymi odpowiedziami, należy jawnie odznaczyć wiersz. Masz dwie opcje, jak to zrobić. Pierwszy z nich, to natychmiast wyłącz wiersz po wybór:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
...
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
To będzie działać dobrze, ale nie jest alternatywą, a jego podejście przyjęte przez UITableViewController
który jest pozostawienie wybrany wiersz następnie odznaczyć go, gdy widok pojawia się ponownie (po tym, jak kontroler, który naciskasz, jest wyskakiwany ze stosu).
Ma to niewielką zaletę, że użytkownik widzi przebłysk poprzedniego wyboru po powrocie, aby zobaczyć, co wybrał wcześniej.
Aby to realizować, wystarczy zastąpić viewWillAppear
:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}
Jak powiedziałem, to co domyślny realizacji UITableViewController
„s viewWillAppear:
robi więc jeśli używasz UITableViewController
i nie obejrzeniu to zachowanie, powinieneś sprawdzić, czy wywołujesz implementację super
w klasie 'własnej viewDidAppear:
.
Aktualizacja (30 października 2013): Cóż, jest to popularna odpowiedź! Jak słusznie zauważa Ben w komentarzach, UITableViewController faktycznie robi to w viewWillAppear:
nie viewDidAppear:
- to jest właściwy czas. Ponadto włącza się i wyłącza to zachowanie za pomocą właściwości clearsSelectionOnViewWillAppear
użytkownika UITableViewController. Poprawiłem powyższą odpowiedź, aby to odzwierciedlić.
naprawdę ładne. Dzięki za to. – ToddB
@Luke Redpath niesamowite ... Dzięki – death7eater
Jest to świetna odpowiedź, ale proponuję, że powinno to być umieszczone w 'viewWillAppear', aby dokładnie naśladować czas odznaczenia UITableViewController. –