Saya ingin menyarankan pendekatan lain untuk masalah ini. Alih-alih menggunakan pengontrol navigasi untuk menampilkan pengontrol tampilan, gunakan segue bersantai. Solusi ini memiliki beberapa keuntungan, tetapi sangat penting,
- Pengontrol asal dapat kembali ke pengontrol tujuan lain (bukan hanya yang sebelumnya) tanpa mengetahui apa pun tentang tujuan.
- Segmen push dan pop didefinisikan dalam storyboard, jadi tidak ada kode navigasi di pengontrol tampilan Anda.
Anda dapat menemukan detail lebih lanjut di Unwind Segues Step-by-Step . Cara menjelaskan lebih baik di tautan sebelumnya, termasuk cara mengirim data kembali, tapi di sini saya akan membuat penjelasan singkat.
1) Pergi ke pengontrol tampilan tujuan (bukan asal) dan tambahkan segmen bersantai:
@IBAction func unwindToContact(_ unwindSegue: UIStoryboardSegue) {
//let sourceViewController = unwindSegue.source
// Use data from the view controller which initiated the unwind segue
}
2) Seret CTRL dari pengontrol tampilan itu sendiri ke ikon keluar di pengontrol tampilan asal:
3) Pilih fungsi bersantai yang baru saja Anda buat beberapa saat yang lalu:
4) Pilih segmen bersantai dan beri nama:
5) Pergi ke tempat mana pun dari pengendali tampilan asal dan panggil segmen bersantai:
performSegue(withIdentifier: "unwindToContact", sender: self)
Saya telah menemukan pendekatan ini banyak hasil ketika navigasi Anda mulai menjadi rumit.
Saya harap ini membantu seseorang.