Apa perbedaan antara Modal dan Push segue di Storyboards?

178

Bisakah seseorang menjelaskan kepada saya apa perbedaan yang tepat antara modaldan pushsegue?

Saya tahu bahwa ketika kami menggunakan pushsegue akan ditambahkan ke tumpukan, jadi ketika kami terus menggunakannya pushakan terus menempati memori?

Dapatkah seseorang tolong tunjukkan saya bagaimana keduanya diterapkan?

ModalSegues dapat dibuat dengan sederhana ctrl-clickdan menarik ke tujuan tetapi ketika saya melakukannya dengan pushaplikasi saya crash.

Saya mendorong dari tombol ke UINavigationControlleryang memiliki UIViewController.

Gaurav_soni
sumber

Jawaban:

174

Sebuah dorongan Segue adalah menambahkan VC lain untuk tumpukan navigasi. Ini mengasumsikan bahwa VC yang berasal dari push adalah bagian dari pengendali navigasi yang sama dengan yang VC yang ditambahkan ke tumpukan milik. Manajemen memori tidak menjadi masalah dengan pengendali navigasi dan tumpukan yang dalam. Selama Anda merawat objek yang mungkin Anda lewati dari satu VC ke yang lain, runtime akan menangani tumpukan navigasi. Lihat gambar untuk indikasi visual: NavStack

Sebuah modal Segue adalah salah satu VC menyajikan VC lain modally. VC tidak harus menjadi bagian dari pengendali navigasi dan VC yang disajikan secara umum umumnya dianggap sebagai "anak" dari VC (induk) yang ada. VC yang disajikan secara normal biasanya tanpa bilah navigasi atau bilah tab. VC yang hadir juga bertanggung jawab untuk mengabaikan modal VC yang dibuat dan disajikan.

Semoga ini membantu.

LJ Wilson
sumber
1
@EIJay terima kasih atas penjelasannya. Satu pertanyaan lagi kapan saya harus menggunakan modal dan kapan harus menggunakan push segue?
Gaurav_soni
43
Secara umum, saat Anda ingin menampilkan tampilan detail tampilan ringkasan, gunakan pengontrol navigasi dan Push Segues. Jika tampilan "induk" tidak benar-benar berhubungan sejauh data terkait dengan tampilan "anak", maka gunakan modal. Contoh yang baik untuk tampilan modal adalah tampilan Login. Tampilan Login tidak benar-benar memiliki hubungan apa pun sejauh data terkait dengan tampilan "induk".
LJ Wilson
5
@ TT Ya, Anda dapat membuat "rantai model". Mengabaikan VC di rantai melepaskan semua VC di rantai - pengguna hanya melihat VC atas mengabaikan (ketika Anda mengaktifkan animasi). Ini seperti pengontrol navigasi.
Constantino Tsarouhas
3
@jchatard Ya. Selama segue Anda adalah modal, di storyboard Anda akan melihat bahwa bilah navigasi tidak diwariskan. Jadi cukup klik pada VC pertama dari rantai modal yang Anda miliki dan kemudian klik menu Editor -> Embed In -> Navigation Controller. Ini akan membuat Anda pengendali navigasi yang umum untuk semua rantai modal Anda. Bukan berarti pada saat itu hanya segmen untuk menampilkan pengontrol navigasi adalah "modal", sedangkan semua segmen dalam rantai modal Anda harus "mendorong" segmen.
HpTerm
3
Push hanya dapat digunakan JIKA VC yang Anda gunakan menggunakan pengontrol navigasi. Cobalah untuk mendorong dari VC yang tidak tertanam dalam pengontrol navigasi dan itu akan mengeluarkan pengecualian. Jadi, ini benar-benar tidak ada hubungannya dengan seberapa erat data terhubung antara orang tua dan anak, itu harus dilakukan hanya dengan apakah Anda menggunakan pengontrol navigasi untuk mengelola VC Anda. Anda dapat melakukan hal yang persis sama secara manual menggunakan segue menggunakan transisi modal.
smileBot
22

Pembaruan Swift 3.0 dan XCode 8.2.1

1. Dorong Segue

Segue push telah diganti namanya menjadi Show segue. Untuk membuat push segue, pengontrol tampilan induk harus tertanam di pengontrol navigasi. Pengontrol navigasi menyediakan bilah navigasi. Setelah Anda menghubungkan dua pengontrol tampilan dengan push segue, pengontrol tampilan anak akan secara otomatis memiliki bilah navigasi di bagian atas. Pengontrol tampilan anak akan ditambahkan di atas tumpukan navigasi.

masukkan deskripsi gambar di sini

Push segue juga menyediakan fitur standar. Pengontrol tampilan anak akan memiliki tombol kembali yang membawa Anda kembali ke pengontrol tampilan induk. Anda juga dapat menggeser ke kanan untuk memunculkan pengontrol tampilan anak. Animasi untuk push segue seperti menggeser halaman secara horizontal.

masukkan deskripsi gambar di sini

Meskipun Anda diizinkan membuat push segue dari pengontrol tampilan yang tidak ada di pengontrol navigasi, Anda akan kehilangan semua fitur seperti bilah navigasi, animasi, gerakan, dll ketika Anda melakukannya. Dalam hal ini, Anda harus menyematkan pengontrol tampilan orang tua Anda di dalam pengontrol tampilan navigasi terlebih dahulu dan kemudian buat tombol segue ke pengontrol tampilan anak.

masukkan deskripsi gambar di sini

2. Modal Segue

Modal segue (yaitu hadir secara modern), di sisi lain, mempresentasikan atas pengontrol tampilan saat ini. Pengontrol tampilan anak tidak akan mewarisi pengontrol tampilan navigasi sehingga bilah navigasi akan hilang jika Anda menampilkan modal segue dari pengontrol tampilan dengan pengontrol tampilan navigasi. Anda harus menyematkan pengontrol tampilan anak di pengontrol navigasi lagi dan memulai tumpukan navigasi baru jika Anda menginginkannya kembali. Jika Anda ingin kembali ke pengontrol tampilan induk, Anda harus menerapkan ini sendiri dan menelepon dismissdari kode.

masukkan deskripsi gambar di sini

Animasi untuk modal segue adalah pengontrol tampilan anak akan muncul dari bagian bawah halaman. Pengontrol tampilan navigasi juga hilang dalam demo ini

masukkan deskripsi gambar di sini

Fangming
sumber
6

Tampilan push harus dibangun di a navigationController.

Klik pada Anda master view, lalu di bilah menu pilih:

EDITOR->embed in->navigationController
Simone Pistecchia
sumber
Salah, pushViewbisa juga dibangun TANPA navigationControllerdan jawaban ini tidak lengkap!
Daksh Gargas
1

Ini mendorong kontrol menggunakan metode push khusus dan segue untuk storyboard Papan Cerita

Dan Modal adalah cara untuk menavigasi melalui tampilan tanpa menggunakan Storyboard.

Pushkraj
sumber
Bagaimana cara membuat modal segue tanpa menggunakan storyboard?
jianpx
@ jianpx: Anda hanya dapat melakukan segmentasi saat menggunakan storyboard. Jika tidak, Anda dapat menggunakan pengontrol Navigasi atau PresentModalViewController untuk beralih antar tampilan.
Pushkraj
@ Pushkraj terima kasih. Jadi maksud Anda tidak ada cara untuk membuat segue dengan kode?
jianpx
@ jianpx: Tidak perlu. Segue hanya diperlukan saat menggunakan storyboard.
Pushkraj