Un altro modo è quello di svuotare tutti i controller di visualizzazione che si stanno eseguendo come variabili locali di classe - quindi in viewWillAppear, si sa di essere stato colpito a causa di un drill-up se una delle variabili locali della classe è ancora impostata. Si sa anche da quale controller è tornato l'utente, quindi è possibile fare una logica diversa (come il recupero dei valori modificati dai controller della vista su cui è stato eseguito il drill down).
Non dimenticare di rilasciare e cancellare i riferimenti in viewWillAppear in modo che il sistema venga ripristinato per riconoscere nuovamente le cose correttamente.
Mi piace questo meccanismo più che avere i controller di drill down noti sulla vista principale come un delegato per estrapolare le modifiche, poiché spesso stanno lavorando su una piccola porzione di dati separata e non dovrebbero sapere di una controller dell'intero master view. Li rende più facili da riutilizzare poiché possono essere richiamati da molte classi diverse.
fonte
2009-07-03 00:18:23
Anche io ho lottato con questo. Avevo sperato di creare una classe helper e renderla il mio "stack" UINavigationControllerDelegate, e poi guardando tramite "navigationController: willShowViewController:" ma ci sono due problemi: 1) sembra essere chiamato anche quando non viene premuto (come il tab su quella pila - che sembra sospetto) e 2) questo è chiamato DOPO la viewWillAppear del controller correlato, che causa problemi logici per me poiché ho bisogno di sapere se sono nella stessa pila prima che appaia la vista. Lo sto solo indicando perché questo approccio sembrava elegante, ma era senza uscita. –