Wann sollte addChildViewController vs pushViewController verwendet werden?
Ich habe mir gerade ein 2011 WWDC
Vortrag "Umsetzung von UIViewController Containment" (hier ist ein link zu dem video)
Erwähnt diese beiden Möglichkeiten zum hinzufügen von viewControllers auf den Bildschirm, und ich würde schätzen, einige Klarstellungen über die besten Praktiken...
addChildViewController /removeFromParentViewController
mit einem @property (nonatomic, readonly) NSArray *childViewControllers und [self transitionFromViewController:currentView toViewController:nextView duration: options: animations: completion:];
pushViewController: animated: /popViewControllerAnimated
Sie wirklich schnell Magermilch Vergangenheit, diese in der Präsentation
In meine apps, die ich verwenden alle benutzerdefinierten viewControllers, und bis heute habe ich es immer geschafft Sie mit:
[nextController performSelector:@selector(setDelegate:) withObject:self];
[currentPageController.view removeFromSuperview];
[self.view addSubview:nextController.view];
Aber ich verstehe jetzt, dass dies ist eine schlechte Praxis, und ich Frage mich, was ist der richtige Weg, um "addChildViewController" und was ist der richtige Weg, um "pushViewController"?
Schätze ich wirklich Ihre Gedanken über die Sache!
InformationsquelleAutor der Frage RanLearns | 2011-11-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja,
pushViewController:
ist für die navigation-Controller zu verwalten, dass ein Stapel von view-Controller.addChildViewController:
auf der anderen Seite ist ein Teil von einem iOS-5-Funktion namens "view controller "containment".Die grundlegende Idee dahinter ist, die Sie einbetten können Ihre view-Controller in andere view-Controller Ihres eigenen (z.B. bei der Portierung einer iPhone app auf das iPad) und somit leicht tun, Ihre eigene Implementierung von Dingen wie der navigation-Controller, split-view-Controller etc.
Ein problem mit einer Implementierung, wie Sie Sie zeigen, ist, dass Sie sich nur mit Blick auf. View-controller-events wie die Ausrichtung änderungen nicht übergeben werden, richtig unten in der Hierarchie. View-controller containment versucht, sicherzustellen, dass alle enthaltenen view-Controller erhalten die entsprechenden Meldungen auch.
Blick auf Ihre Umsetzung sollten Sie auch darüber nachdenken, was Sie wirklich erreichen wollen. Ein navigation-controller ist möglicherweise der richtige oder haben Sie vielleicht sogar die nächste controller-Modal (siehe https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/PresentingaViewController.html) Einen bonus bei der Verwendung dieser Methoden (z.B. navigation Controller und den modal Split views) ist, dass der Benutzer bereits vertraut mit den Navigations-Techniken.
In jedem Fall https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/ ist eine gute Lektüre darüber, wie der übergang zwischen den view-Controllern.
Bei der Verwendung von view-controller-containment-Sie haben im Grunde fügen Sie die Ansicht an die übergeordnete Ansicht wie gewohnt (dies muss durchgeführt werden, selbst wenn der controller Hinzugefügt wird). Dann nutzen Sie
addChildViewController:
hinzufügen der untergeordneten Ansicht-controller, um die Umgebung ein. Sie haben auch benachrichtigt die Kindes-controller vondidMoveToParentViewController:
dass es bereits in einem anderen controller. Sie können auchtransitionFromViewController:toViewController:
um den Austausch einer view-controller für einen weiteren, Optional Angabe einer animation.InformationsquelleAutor der Antwort Dennis Bliefernicht