Vorrei suggerire un altro approccio a questo problema. Invece di utilizzare il controller di navigazione per far apparire un controller di visualizzazione, utilizzare segui Unind. Questa soluzione presenta alcuni vantaggi, ma davvero importanti:
- Il controller di origine può tornare a qualsiasi altro controller di destinazione (non solo quello precedente) senza sapere nulla della destinazione.
- I follower push e pop sono definiti nello storyboard, quindi nessun codice di navigazione nei controller di visualizzazione.
Puoi trovare maggiori dettagli in Unwind Segues Step-by-Step . Il come si spiega meglio nel precedente link, incluso come inviare i dati indietro, ma qui farò una breve spiegazione.
1) Vai al controller di visualizzazione della destinazione (non dell'origine) e aggiungi un svolgitore segue:
@IBAction func unwindToContact(_ unwindSegue: UIStoryboardSegue) {
//let sourceViewController = unwindSegue.source
// Use data from the view controller which initiated the unwind segue
}
2) Trascinamento CTRL dal controller di visualizzazione stesso all'icona di uscita nel controller di visualizzazione dell'origine:
3) Seleziona la funzione di svolgimento che hai appena creato pochi istanti fa:
4) Seleziona lo svolgimento che segue e assegnagli un nome:
5) Vai in qualsiasi punto del controller della vista di origine e chiama lo svolgimento seguente:
performSegue(withIdentifier: "unwindToContact", sender: self)
Ho trovato molto utili questi approcci quando la tua navigazione inizia a complicarsi.
Spero che questo aiuti qualcuno.