SORU
19 HAZİRAN 2013, ÇARŞAMBA


AddChildViewController tam olarak ne yapar?

Ben sadece daldırma ayaklarım ilk defa içine iOS geliştirme ve ilk şeyleri geçirdim yapmak uygulamak custom container view controller - sağlar çağrısı SideBarViewController - swapları dışarıda olan birkaç olası çocuk görünümü denetleyicileri gösterir, neredeyse tam bir standart Tab Bar Controller. (Çok fazla Tab Bar Controller ama bir sekme yerine hideable tarafında bir menü ile bir bar.

Apple belgelerde verilen talimatlara göre, benim kaba çocuk bir ViewController ekliyorum her addChildViewController diyorum. Geçerli alt değiştirme için gereken kod denetleyicisi şöyle: SideBarViewController bakılırsa gösteriliyor görüntüleyin

- (void)showViewController:(UIViewController *)newViewController {
    UIViewController* oldViewController = [self.childViewControllers 
                                           objectAtIndex:0];

    [oldViewController removeFromParentViewController];
    [oldViewController.view removeFromSuperview];

    newViewController.view.frame = CGRectMake(
        0, 0, self.view.frame.size.width, self.view.frame.size.height
    );
    [self addChildViewController: newViewController];
    [self.view addSubview: newViewController.view];
}

addChildViewController burada yok sadece anlamaya çalışıyorum başladı, ve hiçbir fikrim yok olduğunu fark ettim. ViewController .childViewControllers yeni dizi anlaşmazlık dışında, hiçbir şey üzerinde hiçbir etkisi var gibi görünüyor. Eylemler ve çıkışları çocuk denetleyicisinin görüntülemek için çocuğun denetleyicisi bu sette film şeridi hala işe sadece para cezası bile hiç Ara addChildViewController ve ben hayal bile edemiyorum başka ne olabilir etkiler.

Ben kodumu addChildViewController, arama ve bu gibi bakmak yerine değil yeniden Eğer gerçekten de...

- (void)showViewController:(UIViewController *)newViewController {

    // Get the current child from a member variable of `SideBarViewController`
    UIViewController* oldViewController = currentChildViewController;

    [oldViewController.view removeFromSuperview];

    newViewController.view.frame = CGRectMake(
        0, 0, self.view.frame.size.width, self.view.frame.size.height
    );
    [self.view addSubview: newViewController.view];

    currentChildViewController = newViewController;
}

... sonra benim app hala mükemmel çalışıyor, anladığım kadarıyla!

Apple belgeleri addChildViewController ne yaptığı, ya da bu dememiz gerekiyor neden çok fazla ışık tutmuyor. Yöntemi ne ya UIViewController Class Reference kendi bölümünde kullanılmalıdır neden ilgili açıklamasının tamamını, bir kısmını, şu anda

Ekler bir çocuk olarak verilen görünüm denetleyicisi. ... Bu yöntem sadece özel konteyner görünümü denetleyicisi bir uygulama tarafından çağrılmak üzere tasarlanmıştır. Bu yöntem geçersiz kılmak, uygulamanızda süper çağırmalısınız.

Ayrıca bu paragraf aynı sayfada daha önce var:

Konteyner görünümü denetleyicisi çocuk bir görünüm kendisi ile kumanda görünüm hiyerarşisi çocuğun kök görünüm eklemeden önce ilişkilendirmek gerekir. Bu iOS düzgün çocuk görünümü denetleyicileri ve bu denetleyicileri yönetmek görüşleri rota olayları sağlar. View hiyerarşi bir çocuğun kök görüntülemek kaldırdıktan sonra, benzer şekilde, çocuğun kendisinden denetleyicisi görünümü olan bağlantısını kesin. Ya bu ilişkileri kırmak için, kabı özel yöntemler temel sınıf tarafından tanımlanan çağırır. Bu yöntemler konteyner sınıf müşteriler tarafından çağrılmak üzere tasarlanmıştır; sizin konteyner beklenen koruma davranışı sağlamak için uygulama tarafından kullanılacak.

Burada aramak gerekebilir temel yöntemleri:

addChildViewController:
removeFromParentViewController
willMoveToParentViewController:
didMoveToParentViewController:

ama değil teklif herhangi bir ipucu olarak ne 'olaylar' veya 'beklenen davranış çevreleme' konuşuyor, ya da neden (ya da zaman) adını veren bu yöntemler, bir 'temel'.

Örnekler özel konteyner görünümü denetleyicileri "Özel Konteyner Görünümü Denetleyicileri" bölümünde Apple belgeler tüm ara bu yöntem, öyle sanıyorum ki, hizmet verdiği bazı önemli amacı dışında sadece haşhaş çocuk ViewController üzerine bir dizi, ama çözemedim ne olduğunu amacıdır. Bu yöntem, neden arayayım? ne yapar

CEVAP
27 HAZİRAN 2013, PERŞEMBE


Bir örnek, bin kelimeye değer olduğunu düşünüyorum.

Kütüphane bir uygulama üzerinde çalışıyordum ve kullanıcı bir not eklemek istediğinde görünen güzel bir not defteri görünümü göstermek istedim.

enter image description here

Bazı çözümler denedikten sonra, Not Defteri göstermek için kendi özel çözüm icat sona erdi. Not Defteri göstermek istediğim zaman, NotepadViewController yeni bir örneğini oluşturmak ve ana görünüm için bir küme olarak kök görünüm ekleyin. Şimdiye kadar çok iyi.

Sonra Not Defteri resim kısmen yatay modda klavye altında gizli olduğunu fark ettim.

enter image description here

Not Defteri görüntüsünü değiştirmek ve bir değişiklik yapayım dedim. Ve bunu yapmak için willAnimateRotationToInterfaceOrientation:duration: kod uygun yöntemi yazdım, ama uygulamayı çalıştırdığımda hiçbir şey olmadı! Ve sonra hata ayıklama UIViewController'In rotasyon yöntemleri aslında NotepadViewController denir. hiçbiri fark ettim Sadece ana görünüm denetleyicisi bu yöntemleri çağırdı.

Bunu çözmek için, ana görünüm denetleyicisi deniyor zaman NotepadViewController tüm yöntemleri el ile aramam gerektiği. Yakında bu işleri karmaşık hale ve uygulaması ilgisiz bileşenleri arasında fazladan bir bağımlılık yaratacak.

O çocuk görünümü denetleyicileri kavramı tanıtıldı geçmiş oldu. Ama şimdi sadece 23* *ana görünüm denetleyicisi için gereken ve her şey daha fazla el ile herhangi bir çalışma olmadan beklendiği gibi çalışır.

Düzenleme: Alt görünümü denetleyicileri için iletilen olaylar iki kategoriye ayrılır:

1 - Görünüm Yöntem:

- viewWillAppear:
- viewDidAppear:
- viewWillDisappear:
- viewDidDisappear:

2 - Rotasyon Yöntemleri:

- willRotateToInterfaceOrientation:duration:
- willAnimateRotationToInterfaceOrientation:duration:
- didRotateFromInterfaceOrientation:

Ayrıca otomatik olarak shouldAutomaticallyForwardRotationMethods shouldAutomaticallyForwardAppearanceMethods geçersiz kılma tarafından iletilen istediğiniz şekilde kontrol edebilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boogie2988

    boogie2988

    6 NİSAN 2006
  • fouseyTUBE

    fouseyTUBE

    21 Mart 2011
  • Michael Lummio

    Michael Lumm

    25 Mayıs 2007