Jeśli chcesz tylko odświeżyć komórki, który został wybrany, zastępują viewWillAppear:
w niestandardowej podklasy UITableViewController
tak:
- (void)viewWillAppear:(BOOL)animated
{
NSIndexPath *selectedRowIndexPath = [self.tableView indexPathForSelectedRow];
[super viewWillAppear:animated]; // clears selection
if (selectedRowIndexPath) {
[self.tableView reloadRowsAtIndexPaths:@[selectedRowIndexPath] withRowAnimation:UITableViewRowAnimationNone];
}
}
UWAGA: Zakładając, że lewy clearsSelectionOnViewWillAppear
zestaw do YES
(domyślnie), musisz uzyskać ścieżkę indeksu wybranego wiersza przed wywołaniem super
, która wyczyści zaznaczenie.
Ponadto, solution of @ZoranSimic, aby po prostu zadzwonić pod numer [self.tablView reloadData]
jest akceptowalny, ponieważ jest mniej kodu i nadal jest wydajny.
Wreszcie, najlepszym sposobem zachowania synchronizacji komórek widoku tabeli z obiektami modelu, które reprezentują, jest wykonanie funkcji NSFetchedResultsController
i użycie obserwacji wartości klucz-wartość (KVO) i/lub NSNotification
w celu poinformowania kontrolera widoku tabeli o modelu obiekty zostały zmienione, aby można było ponownie załadować odpowiednie komórki. Kontroler widoku tabeli mógł zacząć obserwować zmiany w obiektach modelu w viewDidLoad
i zakończyć obserwację w dealloc
(i gdziekolwiek jesteś manually unload self.view
).
użyłem tej metody, ale musiał przenieść kod z moim didViewLoad do viewWillAppear jak oni gdzie zarówno strzelania na wstępnym obciążeniem. Dla mnie był to większy problem, ponieważ muszę pobrać nowe szczegóły przedmiotu z serwisu WWW. – PowerMan2015