iOS routing viewDidAppear zu untergeordneten View-Controllern?

8

Ich füge einen übergeordneten Ansichtscontroller zu einem übergeordneten Ansichtscontroller hinzu, und alles funktioniert wie erwartet, außer dass die üblichen Rückrufe des untergeordneten Ansichtscontrollers nicht ausgelöst werden. zB Dinge wie viewWillAppear (animiert) werden nie aufgerufen. Ich schaute hinein und dachte, es könnte sein, weil ich nicht WillMoveToParentViewController und DidMoveToParentViewController auf der Kind-View-Controller vor bzw. nach dem Hinzufügen zu dem Eltern aufrufen. Leider hat das Reparieren keinen Unterschied gemacht. Weiß jemand, wie ich dies verdrahten kann, so dass, wenn ich addChildViewController und removeChildViewController die regelmäßigen Rückrufe ausgelöst werden? Nachdem ich den childViewController hinzugefügt habe, füge ich seine Ansicht auch als Unteransicht zur Ansicht des übergeordneten View-Controllers hinzu. An keinem Punkt (addChildViewController & amp; addSubview) werden die ViewVillAppear (animiert), usw. Methoden des Kind-Viewers aufgerufen ...

Nick

    
pachun 24.12.2013, 02:15
quelle

7 Antworten

11

viewWillAppear , viewDIdAppear wird automatisch aufgerufen, wenn Sie Ihre ViewControl-Ansicht einer Ansichtshierarchie hinzufügen

viewWillDisappear , viewDidDisappear wird automatisch aufgerufen, wenn Sie Ihre ViewControl-Ansicht aus einer Ansichtshierarchie entfernen

Vielleicht werden diese Methoden nicht aufgerufen, weil Sie die Sub-Controller-Ansicht vor dem Anzeigen des Hauptansicht-Controllers hinzufügen, und deshalb ist Ihre Hauptansicht nicht in Sicht hiererchy selbst?

Wenn Ihr Hauptansicht-Controller erscheint oder verschwindet, sollten Sie diese Methoden für Childs in entsprechenden Methoden aufrufen.

    
VChemezov 25.12.2013 05:38
quelle
6

Ich bin mir nicht sicher, ob dies auf Ihre Situation zutrifft, aber versuchen Sie, die Callback-Methoden für die Darstellung manuell an Ihre Kinder zu senden.

Aus der Sicht von Apple's Controller Containment Dokumentation :

  

Manchmal sendet das Standardverhalten diese Ereignisse jedoch möglicherweise in einem   Reihenfolge, die für Ihren Container nicht sinnvoll ist. Zum Beispiel, wenn   Mehrere Kinder wechseln gleichzeitig ihren Blickzustand   Vielleicht möchten Sie die Änderungen so konsolidieren, dass die Erscheinung Rückrufe   alle geschehen gleichzeitig in einer logischeren Reihenfolge. Um das zu tun, du   Ändern Sie Ihre Container-Klasse, um die Verantwortung für das Erscheinungsbild zu übernehmen   oder Rotationsrückrufe.

Es wird empfohlen, die Callbacks für die Darstellung manuell an Ihre untergeordneten Elemente weiterzuleiten, wenn Sie eine detailliertere Kontrolle wünschen:

%Vor%     
chourobin 04.03.2015 16:12
quelle
6

Versuchen Sie Folgendes:

%Vor%

nach dem Hinzufügen zu Ihrem View-Controller

    
patuan81 03.09.2015 09:03
quelle
4

Habe gerade versucht, folgendes in viewDidLoad im übergeordneten viewcontroller zu tun und es scheint zu funktionieren

%Vor%     
djshiow 24.12.2013 02:33
quelle
0
%Vor%     
Hemang 11.09.2017 09:32
quelle
0

Chourobin antworten in Swift:

%Vor%

P.S. Da ich den Verweis auf ein Kind VC nicht als eine Eigenschaft oder eine Variable halte. Ich ziehe es vor, mit dem aktuell ausgewählten Segmentindex darauf zuzugreifen. SegmentView ist eine dritte Partei UISegmentControl .

    
Hemang 11.09.2017 09:46
quelle
-4

Sie können den ViewWillAppear des Kind-View-Controllers manuell in parectViewController aufrufen, Code wie folgt

%Vor%

Wenn Sie einen navigationController als childViewController hinzugefügt haben, können Sie einen solchen Code in delegationController delegate

hinzufügen %Vor%

Wenn Sie einen tabBarController als childViewController hinzugefügt haben, können Sie Code wie diesen in tabBarController's delegate und super view

hinzufügen %Vor%

Ich weiß nicht, ob das dein Problem lösen kann, hoffe, dir helfen zu können.

    
Dracuuula 24.12.2013 02:53
quelle