Saya mencoba untuk mengabaikan ViewController dengan cepat dengan memanggil dismissViewController
sebuahIBAction
@IBAction func cancel(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("cancel")
}
@IBAction func done(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("done")
}
Saya bisa melihat pesan println di output konsol tetapi ViewController tidak pernah diberhentikan. Apa yang bisa menjadi masalah?
ios
swift
viewcontroller
rshankar
sumber
sumber
Jawaban:
Dari gambar Anda sepertinya Anda mempresentasikan ViewController menggunakan push
Ini
dismissViewControllerAnimated
digunakan untuk menutup ViewControllers yang disajikan menggunakan modalCepat 2
Cepat 4
sumber
Saya punya solusi untuk masalah Anda. Silakan coba kode ini untuk mengabaikan pengontrol tampilan jika Anda menyajikan tampilan menggunakan modal:
Swift 3:
ATAU
Jika Anda menyajikan tampilan menggunakan segue "push"
sumber
jika Anda melakukan ini saya kira Anda mungkin tidak mendapatkan pesan println di konsol,
sumber
Di Swift 3.0 hingga 4.0, semudah mengetikkan ini ke fungsi Anda:
Atau jika Anda menggunakan pengontrol navigasi, Anda dapat "pop" itu:
sumber
tambahkan baris ini ke dalam kurung:
sumber
Menggunakan:
dari pada:
sumber
Jika Anda menampilkan pengontrol tanpa Pengontrol Navigasi, Anda dapat memanggil kode berikut dari metode pengontrol yang disajikan.
Jika ViewController Anda disajikan secara moderat, presentingViewController opsional tidak akan nol dan kode akan dieksekusi.
sumber
Berdasarkan pengalaman saya, saya menambahkan metode untuk mengabaikan saya sebagai ekstensi untuk UIViewController:
Lalu saya memanggil metode ini untuk mengabaikan view controller di sembarang
UIViewController
subclass. Misalnya, dalam tindakan pembatalan:sumber
Dari dokumentasi Apple :
Dengan demikian, itu adalah praktik yang buruk untuk hanya meminta metode pemberhentian dari itu sendiri.
Apa yang harus Anda lakukan jika Anda menyajikannya adalah:
sumber
Jangan membuat segmen apa pun dari Batalkan atau Selesai ke VC lain dan hanya tulis kode ini tombol Anda @IBAction
sumber
Ini adalah salah satu cara untuk menghilangkan pengontrol tampilan sekarang dan kembali ke pengontrol tampilan sebelumnya. Anda dapat melakukan ini hanya melalui Storyboard.
Silakan coba ini, Ini bekerja dengan saya.
Second Way - Gunakan -
navigationController.popViewControllerAnimated(true)
Semoga berhasil ..
sumber
Untuk referensi, perlu diketahui bahwa Anda mungkin mengabaikan pengontrol tampilan yang salah. Misalnya, jika Anda memiliki kotak peringatan atau modal yang ditampilkan di atas modal lain. (Misalnya, Anda dapat memasang lansiran pos Twitter di atas lansiran modal saat ini). Dalam hal ini, Anda perlu menelepon pemberhentian dua kali, atau menggunakan segue bersantai.
sumber
Jika Anda menghadirkan ViewController secara modal, dan ingin kembali ke root ViewController, berhati-hatilah untuk mengabaikan ViewController yang disajikan secara modern ini sebelum Anda kembali ke root ViewController jika tidak ViewController ini tidak akan dihapus dari Memori dan menyebabkan kebocoran Memori.
sumber
Di Swift 3.0
Jika Anda ingin mengabaikan pengontrol tampilan yang disajikan
sumber
Dalam Swift 4.1 dan Xcode 9.4.1
Jika Anda menggunakan pushViewController untuk menyajikan pengontrol tampilan baru, gunakan ini
sumber
Coba ini:
sumber
Kode ini ditulis dalam aksi tombol untuk mengabaikan
sumber
sumber
Jika Anda menggunakan metode ini dalam VC induk maka Anda harus memanggil fungsi ini, untuk mengabaikan VC anak gunakan ini
jika Anda memanggil VC anak dengan menggunakan metode push, untuk mengabaikan VC anak gunakan ini
sumber