Storyboard'larda Modal ve Push segue arasındaki fark nedir?


179

Birisi bana segue modalile pushsegue arasındaki farkın ne olduğunu açıklayabilir mi?

pushSegue'i kullandığımızda bir yığına eklendiğini biliyorum, bu yüzden kullanmaya pushdevam ettiğimizde bellek işgal etmeye devam ediyor mu?

Birisi bana bu ikisinin nasıl uygulandığını gösterebilir mi?

Modalsegues basitçe ctrl-clickve hedefe sürükleyerek oluşturulabilir ama pushbenim uygulama çöküyor ile bunu .

Ben bir düğmeden İtiyorum UINavigationControllerbir sahiptir UIViewController.

Yanıtlar:


174

Bir push Segue gezinti yığınına başka bir VC ekliyor. Bu, basmayı başlatan VC'nin, yığına eklenen VC'nin ait olduğu aynı gezinme denetleyicisinin bir parçası olduğunu varsayar. Bellek yönetimi, gezinti denetleyicileri ve derin bir yığınla ilgili bir sorun değildir. Bir VC'den diğerine geçtiğiniz nesnelere baktığınız sürece, çalışma zamanı gezinme yığınına bakar. Görsel bir gösterge için resme bakın: NavStack

Bir modal Segue modally başka VC sunulması sadece bir VC olduğunu. VC'lerin bir navigasyon kontrolörünün parçası olması gerekmez ve modal olarak sunulan VC genellikle sunum yapan (ana) VC'nin bir "alt öğesi" olarak kabul edilir. Modsal olarak sunulan VC genellikle herhangi bir gezinme çubuğuna veya sekme çubuğuna sahiptir. Sunum yapan VC, oluşturduğu ve sunduğu modal VC'nin işten çıkarılmasından da sorumludur.

Bu yardımcı olur umarım.


1
@EIJay Büyük açıklama için teşekkürler. Bir soru daha ne zaman modal ve ne zaman push segue kullanmalıyım?
Gaurav_soni

43
Genel olarak, özet görünümün ayrıntılı bir görünümünü göstermek istediğinizde, bir gezinme denetleyicisi ve Push Segues kullanın. "Üst" görünüm, veriler "alt" görünümle ilgili olduğu sürece gerçekten ilgili değilse, bir yöntem kullanın. Kalıcı görünüm için iyi bir örnek Giriş görünümüdür. Giriş görünümünün, veriler "üst" görünümle ilgili olduğu sürece gerçekten bir ilişkisi yoktur.
LJ Wilson

5
@TJ Evet, "model zincirleri" oluşturabilirsiniz. Bir VC'yi zincirden çıkarmak, tüm VC'leri zincirden çıkarır - kullanıcı yalnızca üst VC'nin işten çıkarılmasını görür (animasyonu etkinleştirdiğinizde). Navigasyon kontrolörleri gibi.
Constantino Tsarouhas

3
@jchatard Evet. Segueiniz modal olduğu sürece, film şeridinde gezinme çubuğunun miras alınmadığını göreceksiniz. Bu yüzden sahip olduğunuz mod zincirinin ilk VC'sine tıklayın ve ardından menü Düzenleyici -> Göm - - Gezinti Denetleyici'ye tıklayın. Bu, tüm modal zinciriniz için ortak olacak bir navigasyon kontrolörü ayarlayacaktır. O anda sadece navigasyon kontrolörünü görüntülemek için segue "modal" iken, modal zincirinizdeki tüm segueler "itme" segues olmalıdır.
HpTerm

3
İtme yalnızca, aradığınız VC bir gezinti denetleyicisi kullanıyorsa kullanılabilir. Gezinti denetleyicisine gömülü olmayan bir VC'den zorlamaya çalıştığınızda bir istisna atar. Bu nedenle, verinin ebeveyn ve çocuk arasında ne kadar sıkı bir şekilde bağlandığına dair hiçbir ilgisi yoktur, sadece VC'lerinizi yönetmek için bir gezinme denetleyicisi kullanıp kullanmadığınızla ilgilidir. Modal geçişleri kullanarak sekmeleri kullanarak tamamen aynı şeyi manuel olarak yapabilirsiniz.
smileBot

22

Swift 3.0 ve XCode 8.2.1 güncellemesi

1. İtmeli Segue

Push segue, Show segue olarak yeniden adlandırıldı . Push segue oluşturmak için, üst görünüm denetleyicisinin gezinme denetleyicisine yerleştirilmesi gerekir. Gezinti denetleyicisi gezinti çubuğu sağlar. İki görünüm denetleyicisini push segue ile bağladığınızda, alt görünüm denetleyicisinde otomatik olarak üstte gezinme çubuğu bulunur. Alt görünüm denetleyicisi, gezinme yığınının üstüne eklenir.

resim açıklamasını buraya girin

Push segue ayrıca varsayılan özellikler sunar. Alt görünüm denetleyicisinde, sizi üst görünüm denetleyicisine geri götüren bir geri düğmesi bulunur. Alt görünüm denetleyicisini açmak için sağa hızlıca kaydırabilirsiniz. Push segue için animasyon, sayfaları yatay olarak kaydırmak gibidir.

resim açıklamasını buraya girin

Gezinti denetleyicisinde olmayan bir görünüm denetleyicisinden bir itme selamı yapmanıza izin verilirken, bunu yaptığınızda gezinme çubuğu, animasyon, jest vb.Gibi tüm özellikleri kaybedersiniz. Bu durumda, üst görünüm denetleyicinizi önce navigasyon görünüm denetleyicisine gömmelisiniz ve ardından alt görünüm denetleyicilerine push segue yapmanız gerekir.

resim açıklamasını buraya girin

2. Kalıcı Segue

Öte yandan, bir model segue (yani, modal olarak mevcut), mevcut görüş kontrolörü üzerinde mevcuttur. Çocuk görünümü denetleyicisi, navigasyon görünümü denetleyicisini devralmaz, bu nedenle gezinti görünümü denetleyicisine sahip bir görünüm denetleyicisinden kalıcı sekme sunarsanız gezinme çubuğu kaybolur. Alt görünüm denetleyicisini yeniden gezinme denetleyicisine katmanız ve isterseniz yeni bir gezinme yığını başlatmanız gerekir. Üst görünüm denetleyicisine geri dönmek istiyorsanız, bunu kendiniz uygulamanız ve dismisskoddan aramanız gerekir .

resim açıklamasını buraya girin

Modsal segue için animasyon, alt görünüm denetleyicisinin sayfanın altından gelmesidir. Navigasyon görüntüleme denetleyicisi de bu demoda gitti

resim açıklamasını buraya girin


6

Push görünümü a navigationController.

Tıklayın master view, ardından menü çubuğundan seçin:

EDITOR->embed in->navigationController

Yanlış, pushViewOLMADAN da inşa edilebilir navigationControllerve bu cevap eksik!
Daksh Gargas

1

Bu, storyboard için özel itme ve segue yöntemleri kullanarak kontrolleri zorlamaktır Hikaye Panosu

Modal, Storyboard'ları kullanmadan görünümler arasında gezinmenin yoludur.


Görsel senaryo taslakları kullanmadan kalıcı segue nasıl oluşturulur?
jianpx

@jianpx: Yalnızca film şeridi kullandığınızda segue yapabilirsiniz. Aksi takdirde, görünümler arasında geçiş yapmak için Gezinti denetleyicisini veya PresentModalViewController'ı kullanabilirsiniz.
Pushkraj

@ Pushkraj teşekkürler. Yani kodla segue oluşturmanın bir yolu yok mu demek istiyorsun?
jianpx

@jianpx: Gerekli değil. Segue yalnızca film şeridi kullanılırken gereklidir.
Pushkraj
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.