2012-12-27 14 views
10

Hikaye panosunu kullanarak birkaç kapsayıcı görünümüne sahip bir "container" viewController sahibim. Bu kapsayıcı görünümün her birinin , yerleşik bir denetleyicinin görünümü için bir bağlantıya sahiptir.Hikaye panosunda ContainerView'a bir UIViewController xib yükleniyor

Büyük bir proje üzerinde çalıştığımdan öyküde, storyboard dosyasının çok büyük olduğu ve çok sayıda "alt" viecontroller görünüm düzenini içerdiği ortaya çıkıyor. Birkaç kişinin aynı anda üzerinde çalışması gerektiğinde bu dosya üzerinde çalışan bir sorun olacaktır. ve bu benim için iyi değil. Her bir konteynere yüklenecek bir yol olup olmadığını görmek için bir viewcontroller xib dosyası görüntülemek ve hala storyboard kullanıyor olmak istiyorum.

Her bir viewcontroler için .xib dosyalarını bunları storyboardun kendisinde tutmak yerine oluşturmak ve bunları storyboard'daki kapsayıcı görünümlerine bağlamak.

teşekkürler,

cevap

5

Evet, yapabilirsiniz. Bir kaç inceleme:

  1. yapmanız gereken tek şey biz NIBs kullanırken kullanmak için kullanılan kod sıralamada koymaktır. Kaplar söz konusu olduğunda, bu the typical container methods anlamına gelir. Kodla çevreleme yapmadıysanız, Denetleyici Denetleyici Programlama Kılavuzu'ndaki Creating Custom Container View Controllers'a bakın. Film dışı bir sahneye geçiş yaptığınızda (veya bir storyboard olmayan çocuk görünümü denetleyicisi eklerken) alt satırda, NIB tabanlı ortamda her zaman kullandığınız gibi kodlayın. Bu NIB tabanlı sahneyi film şeridinde temsil edemezsiniz. Hep NIBs ile ne gibi Ama sadece denetleyici olsun:

    SecondViewController *controller = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 
    
  2. Açıkçası (örneğin ana sahnedeki konteyner görünümünde temelinde çocuk sahne boyutlandırma) film şeritlerini kullanarak birçok avantajını kaybetmek, ama NIB ortamından daha kötü değilsin. Ancak, bunları "film şeridindeki kapsayıcı görünümlerine bağlayabilmeniz" konusundaki sorunuza yanıt olarak, bu ilişkiyi storyboard'un kendisinde temsil edemezsiniz, aksine bunları program aracılığıyla bağlayabilirsiniz.

  3. Ayrı ekipleriniz tek sahneli ortamlarda çalışıyorsa, bu NIB yaklaşımını kullanabilirsiniz. Bununla birlikte, her mantıksal takım için bir tane olmak üzere, birden fazla film tahtasına sahip olmanız da düşünülmelidir. Yine de bu NIB yaklaşımında yaptığınız gibi, storyboard'lar arasında geçiş yaparken de kodlara başvurmanız gerekecektir, ancak takımlarınızdan birinin ilgilenmek için birden fazla sahnesi varsa, projenin kendi bölümlerinde storyboard avantajlarından yararlanabilirsiniz. Bir sonraki film şeridindeki ilk sahneye almak istediğinizde, şunları yapabilirsiniz:

    UIStoryboard *secondaryStoryboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil]; 
    SecondViewController *controller = [secondaryStoryboard instantiateInitialViewController]; 
    
  4. çocuğunuzun film şeridinde yeni bir sahneye geçiş gerekiyorsa, ben kendi parentStoryboard özellik eklemek için yararlı bulabilirler instantiateViewControllerWithIdentifier gibi bir şey yapmanız gerekiyorsa, o zaman yararlı olabilir çocuk denetleyicim. Açıkçası, yeni denetleyicilere geçiş yapmıyorsanız, bunu yapmanız gerekmeyebilir, ancak, UIStoryboard özelliğine sahip olmanız yararlı olabilir.

+0

Teşekkür ederim Rob, daha önce etrafı kapalı bir şekilde çalışıyorum ve bu projede kullanmayı denedim - gayet iyi çalışıyor, ama sadece "her iki dünyadan zevk almanın" bir yolu olup olmadığını merak ediyordum, ama imkansız görünüyor. storyboard otomatik olarak childViewControllers'ı harika olan çocuklar gibi yapar. neyse, 3,4'te yazdığın şey çok ilginç ve hasta. – Lirik

+0

@LironK Evet, ne yapmak istediğinizi anlıyorum, ancak birden fazla storyboard (ve/veya NIB) varsa, storyboard'un bazı avantajlarını kaybedersiniz. Hikaye tahtaları arasında ya da storyboard ve NIB arasında seçim yapabileceğinizi düşünmüyorum. Korkarım ki bunu kodda yapmak zorundasın. Afedersiniz. – Rob

12

Sen ayrı xib içine görünümü denetleyicisi düzenini taşıyabilirsiniz. Söylediğiniz gibi, bu mizanpajları storyboard'larda paylaşmanın çok uygun bir yoludur.

Hikaye panosunda kapsayıcı görünüm oluştururken, tümleşik ViewController'da sağlanan görünümü sildiğinizden emin olun.ViewController için özel sınıfı sınıf adınıza ayarlayın. Sınıfı eşleştirmek için xib adını yazın (örn. FooViewController.xib böylece FooViewController.m yüklendiğinde bulunabilir.)

Film şeridi görünümü denetleyicisi düzeninde Görünüm'ü silmezseniz, boş göreceksiniz. yerine görüntülemek. Görünüm denetleyicinizdeki viewDidLoad yönteminiz çağrılmayacaktır, çünkü Görünüm varsayılan Storyboard Görünümüdür.

iOS öncesi 7 projesinde iOS 8 için Xcode 6.1 kullanıyorum.

+0

Teşekkürler! Benim günümü kurtardın! – Cleversou

+1

Doğru cevap bu olmalı. Çocuk görünümü denetleyicisini bir NIB'den katıştırmak için yalnızca storyboard'a dayalı bir yaklaşım. Mükemmel. Teşekkür ederim. –

İlgili konular