Bardzo ważna jest tutaj pomoc!Problem z odświeżaniem komórki UITableView w przearanżowaniu
Mam niestandardową komórkę UITableView, składającą się z obrazu (zielony, pomarańczowy lub czerwony) i dwóch etykiet o różnych rozmiarach czcionki. UITableView jest sterowany przez NSMutableArray obiektów.
UITableView jest podzielony na trzy sekcje, z pierwszą sekcją zawierającą wszystkie komórki z czerwonym obrazem, drugą sekcję z pomarańczową, trzecią sekcją z zieloną.
Zaimplementowałem możliwość zmiany układu komórek w ramach UITableView, co pozwala użytkownikowi przeciągnąć, powiedzmy, element z czerwonym obrazem z czerwonej sekcji do sekcji pomarańczowej. Takie przeciąganie działa świetnie, a podstawowe dane są poprawnie aktualizowane. Wiem, że tak jest, ponieważ jeśli wybiorę komórkę, przejdę do jego widoku szczegółów i dane zostaną zaktualizowane.
Jednak UITableView nie aktualizuje się, dopóki nie przejdę do szczegółów (lub zamknąć aplikację) i wrócić! Aktualizuje się również, gdy przewijam nieprawidłową komórkę z widoku i ponownie wyświetlam ją, więc tablica zawiera wyraźnie poprawne dane. Po prostu nie mogę uruchomić odświeżania widoku!
Próbowałem następujące po kodzie zmiany podstawowych danych w moveRowAtIndexPath:
[self.tableView reloadData];
Jednak powoduje to wyjątek. Apple Language Reference w rzeczywistości mówi, że reloadData nie może zostać wywołana podczas wstawiania, usuwania lub animowania, co oczywiście robię. Ponadto próba odświeżenia komórki za pomocą nie jest możliwa (chociaż nie ulega również awarii).
Jakieś pomysły dotyczące odświeżenia widoku UITableView? Nie mogę znaleźć metody afterMoveHasBeenCompleted: cokolwiek, więc jeśli nie mogę wywołać metody reloadData podczas mojej metody moveRowAtIndexPath :, to gdzie ją nazwać ?!
A może to tylko brudny hack? Czy istnieje metoda "animationComplete", którą mogę zamiast tego użyć? ... – h4xxr
To wydaje się być najlepszym sposobem, aby to zrobić, zgodnie z postem gpmoore w tym wątku dla programistów Apple: http://discussions.apple.com/thread.jspa ? messageID = 8450874 – Tim
To frustrujące, ale bardzo uspokajające! Dzięki! – h4xxr