Innym sposobem jest przechowywanie dowolnych kontrolerów widoku, które są przewiercane, jako lokalne zmienne klasy - następnie w viewWillAppear, wiesz, że zostałeś trafiony z powodu przewiercenia, jeśli jakakolwiek z zmiennych lokalnych klasy jest nadal ustawiona. Nawet znasz kontroler, z którego użytkownik powrócił, dzięki czemu możesz wykonywać inną logikę (np. Pobieranie zmienionych wartości z kontrolowanych widoków, które wykonałeś).
Nie zapomnij o zwolnieniu i usunięciu odniesień w viewWillAppear, aby system został zresetowany w celu ponownego prawidłowego rozpoznania.
Bardzo podoba mi się ten mechanizm, niż posiadanie kontrolerów drążących o widoku głównym jako delegata do wypychania zmian, ponieważ często pracują nad oddzielnymi małymi kawałkami danych i nie powinni wiedzieć o cały kontroler widoku głównego. Ułatwia to ich ponowne wykorzystanie, ponieważ mogą być wywoływane przez wiele różnych klas.
Ja też zmagałem się z tym. Miałem nadzieję, że utworzę klasę helpera i zrobię z niej "UINavigationControllerDelegate" mojego "stosu", a następnie przejrzę za pomocą "navigationController: willShowViewController:", ale są dwa problemy: 1) wydaje się być wywoływany nawet wtedy, gdy nie jest wciśnięty (na przykład tabulacja nad tym stosem - co wydaje się podejrzane) i 2) jest to nazywane PO TYM powiązanym widokiem kontroleraWillAppear, co powoduje problemy logiczne dla mnie, ponieważ muszę wiedzieć, czy jestem w tym samym stosie zanim pojawi się widok. Po prostu to wskazuję, ponieważ to podejście wydawało się eleganckie, ale było ślepe. –