1

Ich schreibe meinen eigenen SplitViewController von Grund auf (d. H. Durch Unterklassen UIViewController und nicht UISplitViewController).Kodierung benutzerdefinierter SplitViewController - wann sollte ich viewWillAppear, viewDidAppear, etc ... aufrufen?

Es hat zwei UnteransichtControllers (eine für das linke Panel und eine für das Detail rechten Panel), an die ich die entsprechenden Nachrichten senden muss (viewWillAppear, viewDidAppear, viewWillDisapppear and viewDidDisappear).

Ich weiter diese Nachrichten, wenn meine benutzerdefinierte SplitViewController sie empfängt und es funktioniert gut. Ich habe jedoch Schwierigkeiten herauszufinden, wann ich sie senden soll, wenn einer der beiden Subview-Controller durch einen neuen ersetzt wird, der diese Nachrichten ebenfalls empfangen muss. Ich füge die Ansicht des neuen UIViewController richtig hinzu, aber die Nachrichten werden nicht angemessen genannt.

Mein erster Ansatz war sie in dem Setter des Unterviewcontrollers zu rufen, rief viewWillDisappear-UIViewController um auf die neuen UIViewController-Sets und viewWillAppear werden, aber diese vor viewDidLoad ausgeführt wird, und deshalb nehme ich an, ist falsch.

Ich habe auch gesehen, dass UIView hat eine Methode didAddSubview:, die nützlich sein kann, um zu wissen, wann viewDidAppear auf dem Korrespondenten UIViewController aufrufen.

Jede Hilfe wäre sehr willkommen!

Antwort

2

Wenn Sie UISplitViewController spiegeln möchten, ist es am besten, wenn Sie nur Dummy-UIViewControllers verwenden, die beim Aufruf jeder Methode ausgedruckt werden.

Wie für Ihr aktuelles Problem der Bestellung von viewWillDisappear, viewWillAppear und viewDidLoad, tun gerade:

-(void)setSomeViewController(UIViewController newVC) 
{ 
    [oldVC viewWillDisappear]; 
    [newVC view]; // Causes newVC to load the view, 
        // and will automatically call -viewDidLoad 
    [newVC viewWillAppear]; 

    [oldVC.view removeFromSuperview]; 
    [self.view addSubview:newVC.view]; 

    //retain and release as appropriate 
    // other stuff you'll need to mirror, etc. etc. 
} 
+0

ich auch, dass manchmal bemerkt habe -viewWillAppear: (? Oder war es -viewWillDisappear) automatisch aufgerufen wird, wenn Sie fügen eine VC-Sicht zur Hierarchie hinzu/entfernen sie. Zugegebenermaßen wurde dies oben in der View-Hierarchie gemacht, um benutzerdefinierte View-Übergänge zu implementieren, aber es lohnt sich, daran zu denken. Außerdem denke ich, dass es etwas gibt, das UIViewControllerWrapperView heißt ... –

+0

Soweit ich weiß, tut dies der Basis-UIViewController nicht, aber hierarchische Typen wie UINavigationController, UITabBarController usw. tun dies. –

+0

Danke dafür David Liu. Ich fand auch, dass überschreiben - (void) didAddSubview: (UIView *) Unteransicht in Ihrer benutzerdefinierten UIView kann sehr nützlich sein, so dass die benutzerdefinierte UISplitViewController seine Sub-UIViewControllers, dass viewDidAppear benachrichtigen kann. – monchote