Gdy użytkownik kliknie przycisk w jednym z moich wierszy, aktualizuję model bazowy dla tego wiersza, a następnie wywołuję metodę reloadRowsAtIndexPaths dla danego wiersza (to jest przeładowanie pojedynczego wiersza).UITableView odbija się w górę sekcji podczas wywoływania reloadRowsAtIndexPaths
- (IBAction)handleCompleteTouchEvent:(UIButton *)sender {
NSIndexPath *indexPath = [self.tableView indexPathForView:sender];
id item = [self dataForIndexPath:indexPath];
if ([item respondsToSelector:@selector(completed)]) {
// toogle completed value
BOOL completed = ![[item valueForKey:@"completed"] boolValue];
[item setValue:[NSNumber numberWithBool:completed] forKey:@"completed"];
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
}
}
Problem polega na tym, że widok tabeli po zakończeniu wywołania powraca na górę sekcji. Jak mogę temu zapobiec i zachować pozycję przewijania tam, gdzie jest?
Kod wygląda OK. Czy możesz udostępnić więcej kodu, który może mieć związek z problemem? Czy jest jakieś miejsce w kodzie, jeśli kontroler widoku nazywa się '[self.tableView reloadData];? – Keenle
Dodałem więcej kodu, aby pokazać całą metodę. Po wywołaniu reloadRowsAtIndexPaths tabela automatycznie przewija do góry sekcji, ale tylko wtedy, gdy nagłówek sekcji jest poza ekranem. Nie ma nic szczególnego w tworzeniu komórki lub nagłówku sekcji (tylko ciąg). – xsee
@Keenle Nie wykonuję żadnych ponownych załadowań danych ani niczego w tym stylu. Ponadto, w dokumentacji nie ma nic o odbijaniu się do górnej części sekcji reloadRows. Nigdy wcześniej nie zauważyłem tej funkcjonalności, ale z drugiej strony zazwyczaj nie mam danych zmieniających działania w samej komórce, więc jest to dla mnie nowy rodzaj interakcji. – xsee