Was macht addChildViewController eigentlich?

Ich bin nur Tauchen meine Füße zum ersten mal in der iOS-Entwicklung, und eines der ersten Dinge, die ich habe zu tun ist, implementieren Sie eine custom container view controller - nennen wir es SideBarViewController - , swaps aus, welche von mehreren möglichen Kind-view-Controller zeigt es, fast genau wie ein standard - Tab Bar Controller. (Es ist ziemlich viel Tab Bar Controller aber mit einem ausblendbar Seite im Menü statt einer tab-Leiste.)

Gemäß den Anweisungen in der Apple-Dokumentation, rufe ich addChildViewController immer, wenn ich ein Kind ViewController zu meinem container. Mein code für das austauschen der aktuellen child-view-controller durch das SideBarViewController sieht wie folgt aus:

- (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];
}

Dann begann ich zu versuchen, herauszufinden, genau das, was addChildViewController hier macht, und ich realisierte, dass ich keine Ahnung habe. Neben dem Aufkleben der neuen ViewController im .childViewControllers array, es scheint keinen Einfluss auf irgendetwas. Aktionen und Filialen aus der untergeordneten Steuerung aus Sicht des Kindes controller, den ich eingestellt habe auf dem storyboard noch gut funktionieren, auch wenn ich nie anrufen addChildViewControllerund ich kann mir nicht vorstellen, was es beeinflussen könnte.

In der Tat, wenn ich meinen code umschreiben um nicht nenne addChildViewControllerund stattdessen wie folgt Aussehen...

- (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;
}

... dann ist meine app noch einwandfrei funktioniert, so weit ich erzählen kann!

Die Apple-Dokumentation nicht viel vergossen Licht auf das, was addChildViewController tut, oder warum sollen wir es nennen. Der gesamte Umfang der jeweiligen Beschreibung, was die Methode macht oder warum es verwendet werden soll, in seinem Abschnitt in der UIViewController - Klasse Referenz ist, zu präsentieren:

Fügt den angegebenen view-controller, wie ein Kind.
...
Diese Methode soll nur aufgerufen werden, indem eine Implementierung eines custom container view controller. Wenn Sie diese Methode überschreiben, müssen Sie super in Ihrer Umsetzung.

Gibt es auch in diesem Absatz zuvor auf der gleichen Seite:

Ihren container view controller muss die Zuordnung einer untergeordneten view-controller mit sich selbst, bevor Sie das Kind das root-Ansicht, die view-Hierarchie. Dies ermöglicht iOS ordnungsgemäß Ereignisse auf der route an untergeordnete view-Controller und die Aussicht auf diesen Controller verwalten. Ebenso, nachdem es entfernt ein child der root-Ansicht aus der Sicht der Hierarchie, sollte es trennen, dass untergeordnete view-controller von selbst. Zu machen oder brechen diese Verbände, Ihre container ruft bestimmte Methoden definiert, die von der Basisklasse. Diese Methoden sind nicht dazu gedacht, genannt zu werden, indem Kunden Ihre container-Klasse; Sie sind nur zur Verwendung durch die container-Implementierung zu erwartenden Eindämmung Verhalten.

Hier sind die wesentlichen Methoden, die Sie benötigen könnten, zu nennen:

addChildViewController:
removeFromParentViewController
willMoveToParentViewController:
didMoveToParentViewController:

aber nicht bieten, keine Ahnung, was die 'Ereignisse' oder 'erwartet containment-Verhalten', dass es reden sind, oder warum (oder auch wenn) den Aufruf dieser Methoden ist der 'wesentlichen'.

Die Beispiele für benutzerdefinierte container-view-Controller in den "Custom Container View Controller" - Bereich der Apple-Dokumentation alle rufen Sie diese Methode auf, so dass ich davon ausgehen, dass es dient einigen wichtigen Zweck mehr als nur knallen, das Kind ViewController auf ein array, aber ich kann nicht herausfinden, was dieser Zweck ist. Was macht diese Methode zu tun, und warum soll ich es nennen?

InformationsquelleAutor der Frage Mark Amery | 2013-06-19

Schreibe einen Kommentar