Saya mengirim pengguna ke halaman dengan mengklik tombol. Halaman ini adalah UITableViewController .
Sekarang jika pengguna mengetuk sel, saya ingin mendorongnya kembali ke halaman sebelumnya.
Saya memikirkan sesuatu seperti self.performSegue("back")....
tapi ini sepertinya ide yang buruk.
Apa cara yang benar untuk melakukannya?
Jawaban:
Swift 3:
Jika Anda ingin kembali ke pengontrol tampilan sebelumnya
Jika Anda ingin kembali ke pengontrol tampilan root
sumber
.popViewController(animated: true)
_ = self.navigationController?.popToRootViewController(animated: true)
_ =
adalah konvensi yang cepat untuk itu.Swift 3 , Swift 4
navigationController adalah opsional karena mungkin tidak ada.
sumber
[weak self]
danself?.navigationController?.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as?
Tapi ketika saya menggunakan ini saya tidak bisa menggunakannyaCepat 3
Saya mungkin terlambat dalam jawaban tetapi untuk swift 3 Anda dapat melakukannya dengan cara ini:
sumber
dismiss:
itu tidak hanya akan mengabaikan pengontrol tampilan saat ini, tetapi juga pengontrol tampilan root, dan bukan itu yang diminta di sini.dismiss(animated: true, completion: nil)
tidak berfungsi setelah rotasi!Cepat 4
ada dua cara untuk kembali / kembali ke ViewController sebelumnya:
self.navigationController?.pushViewController(yourViewController, animated: true)
dalam hal ini Anda harus menggunakanself.navigationController?.popViewController(animated: true)
self.present(yourViewController, animated: true, completion: nil)
dalam hal ini Anda harus menggunakanself.dismiss(animated: true, completion: nil)
sumber
Dalam hal Anda mempresentasikan
UIViewController
dari dalamUIViewController
yaitu ..Cukup panggil
dismiss
fungsi:sumber
self.dismiss(animated: true)
- tidak berfungsi setelah rotasicepat 5 dan di atas
kasus 1: menggunakan dengan pengontrol Navigasi
kasus 2: menggunakan dengan controller tampilan sekarang
sumber
Jika Segue adalah Jenis 'Tampilkan' atau 'Dorong' maka Anda dapat memanggil "popViewController (animasi: Bool)" pada Instance of UINavigationController. Atau jika segue adalah jenis "sekarang" lalu panggil "singkirkan (animasi: Bool, selesai: (() -> Void)?)" Dengan instance UIViewController
sumber
untuk swift 3 Anda hanya perlu menulis baris kode berikut
sumber
Coba ini: untuk tampilan sebelumnya gunakan ini:
pop to root menggunakan kode ini:
sumber
Swift 4.0 Xcode 10.0 dengan TabViewController sebagai tampilan terakhir
Jika ViewController terakhir Anda tertanam dalam TabViewController, kode di bawah ini akan mengirim Anda ke root ...
Tetapi jika Anda benar-benar ingin kembali ke tampilan terakhir (Itu bisa menjadi tampilan Tab1, Tab2 atau Tab3 ..) Anda harus menulis kode di bawah ini:
Ini berfungsi untuk saya, saya menggunakan tampilan setelah salah satu dari TabView saya :)
sumber
Untuk pertanyaan tentang cara menyematkan viewController Anda ke navigationController di storyboard:
sumber
Yang ini berfungsi untuk saya (Swift UI)
sumber
Saya melakukannya seperti ini
sumber
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,
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:
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:
Saya telah menemukan pendekatan ini banyak hasil ketika navigasi Anda mulai menjadi rumit.
Saya harap ini membantu seseorang.
sumber
Saya dapat mengalihkan ke halaman root dengan menulis kode di "viewDidDisappear" dari navigated controller,
override func viewDidDisappear(_ animated: Bool) { self.navigationController?.popToRootViewController(animated: true) }
sumber