WWDC 2011 Oturum 102, Apple benzer özel görünüm denetleyicisi kapları yaratma yeteneği olduğunu View Controller İçericinin tanıttı UITabBarController
, UINavigationController
ve benzeri.
Örnekleri birkaç kez izledim. Bu modelle ilişkili bir dizi yöntem var, ancak bunları tam olarak anlamak biraz zordu. Burada olduğunu düşündüğüm şeyleri yayınlayacağım ve topluluğun şüphelerimi onaylayıp onaylamayacağını göreceğim.
Senaryo 1: Üst öğe yoktan yeni bir üst öğe görünümü denetleyicisine geçme
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view]; // or something like this.
[vc didMoveToParentViewController:self];
İlk iki satır verilen sırada mı olmalı yoksa tersine çevrilebilir mi?
Senaryo 2: Üst görünüm denetleyicisinden üst görünüm denetleyicisine geçme
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
Aramak da gerekli [vc didMoveToParentViewController:nil]
mi? 102. Oturumdaki örnekler bu senaryoda bunu yapmadı , ancak bunun bir ihmal olup olmadığını bilmiyorum.
Senaryo 3: Bir üst öğe görünümü denetleyicisinden diğerine geçiş
Bu muhtemelen aşağıdaki şekilde gerçekleşecektir, çünkü her bir üst öğe görüntüleme denetleyicisindeki mantık kapsüllenecektir.
// In the old parent
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
// In the new parent
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];
Sorular
Ana sorum şudur: Genel olarak, görünüm denetleyicisi muhafazası bu şekilde mi çalışmalı? Yukarıda verilen mekanikler doğru mu?
Aramadan willMoveToParentViewController
önce aramak gerekli addChildViewController
mi? Bu bana mantıklı bir sıra gibi görünüyor, ama kesinlikle gerekli mi?
Aradıktan didMoveToParentViewController:nil
sonra aramak gerekli removeFromParentViewController
mi?
addChildViewController
dengelenmelididMoveToParentViewController
vewillMoveToParentViewController
dengelenmelidirremoveFromParentViewController
. Bu tam olarak aradığım şeydi. Belgelerde bunu nasıl kaçırdığımdan emin değilim.