Wystąpił problem podczas implementacji UITableView
w aplikacji na iOS, nad którą pracuję (pakiet SDK dla systemu iOS 4.2). Jeśli stuknę komórkę w widoku tabeli, a następnie przewiń widok tak, aby komórka opuszczała ekran, po jej przywróceniu wybrana została ostatnio wybrana komórka.UITableViewCell zostaje ponownie zaznaczone po przewinięciu z powrotem na ekranie
Aby to sprawdzić stworzyłem nowy projekt View Based Application, wyciągnięty z UITableView
w konstruktorze Interface i ustawić kontroler widoku za źródłem danych widoku tabeli i delegata i umieścić następujący kod w kontrolerze widoku:
- (NSInteger)numberOfSectionsInTableView:(UITableView *) tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger) section {
return 12;
}
- (UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
static NSString *cellID = @"aCellID";
UITableViewCell *aCell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (!aCell) {
aCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease];
}
aCell.textLabel.text = [NSString stringWithFormat:@"Cell %d", indexPath.row +1];
return aCell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *aCell = [tableView cellForRowAtIndexPath:indexPath];
[aCell setSelected:NO animated:YES];
}
Podczas uruchamiania tego (w symulatorze lub na urządzeniu), jeśli miałbym dotknąć dowolnej komórki (np. Komórki 12), byłby zaznaczony i odznaczony. Następnie, bez aktualnie zaznaczonych komórek w tabeli, jeśli przewinę widok tak, aby ostatnia wybrana komórka (w tym przypadku 12) opuściła ekran, zostanie ponownie wybrana, gdy pojawi się ponownie.
Czy jest to domyślne zachowanie dla UITableView
? A może błąd w mojej implementacji? Jaki byłby najlepszy sposób, aby odznaczyć tę komórkę w tej sytuacji?
dzięki! Miałem ten sam problem. – Marky
Czy nadal możesz odtworzyć animację w miejscu, w którym wybiera ją na krótką chwilę, a następnie odznacza ją zaraz po? – chourobin
@ cr54 Tak, nadal można uzyskać taki efekt animacji takiego: - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { [tableView deselectRowAtIndexPath: indexPath animowany: YES]; } –