2017-01-26 28 views
0

Ich habe 3 View-Controller und einen Container-View-Controller. Ich füge diese 3 View-Controller als untergeordnete View-Controller in den Container ein. Wenn ich die App starte, habe ich print-Anweisungen in viewDidload und viewDidAppear in allen View-Controllern, die ausgeführt werden.viewDidload und viewDidAppear wird nicht aufgerufen?

Das Problem ist: Wenn ich zurück "scroll" auf diese Ansichten und es "erscheint" wieder die print-Anweisungen ausführen noch keinen Code in ViewDidAppear noch ViewDidLoad. Warum passiert dies?

Hier ist mein Code, wo ich meine View-Controller instanziieren. Danke für die Hilfe!

override func viewDidLoad() { 
    super.viewDidLoad() 

    scrollView.delegate = self 



    let storyboard = UIStoryboard(name: "Main", bundle: nil) 

    page1 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.feedViewController.rawValue) as! FeedViewController 
    page1.view.translatesAutoresizingMaskIntoConstraints = false 
    page1.delegate = self 
    scrollView.addSubview(page1.view) 
    addChildViewController(page1) 
    page1.didMove(toParentViewController: self) 

    page2 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.favoritesViewController.rawValue) as! FavoritesViewController 
    page2.view.translatesAutoresizingMaskIntoConstraints = false 
    page2.delegate = self 
    scrollView.addSubview(page2.view) 
    addChildViewController(page2) 
    page2.didMove(toParentViewController: self) 

    page3 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.settingsViewController.rawValue) as! SettingsViewController 
    page3.view.translatesAutoresizingMaskIntoConstraints = false 
    scrollView.addSubview(page3.view) 
    addChildViewController(page3) 
    page3.didMove(toParentViewController: self) 


} 

Antwort

0

, was diese Ansicht Controller, um durch ihre Lebenszyklen auslösen würde?

Der übergeordnete Ansichtscontroller, wie auch immer er benannt ist, wird durch den Ladezyklus durchlaufen. Alle Ansichten werden auch durch ihre. (Ich wette, wenn Sie eine Ansicht von einer Unterklasse ableiten und damit einen Haltepunkt innerhalb von draw (rect :) setzen, dann würde es ihn treffen.) Aber es gibt nichts, was die Kind-View-Controller veranlassen könnte, ihr Ding zu machen.

Von dem, was ich sehe, Ihre Ansicht Hierarchie ist:

  • Hauptansicht
  • Scroll Blick in Inneren Hauptansicht
  • drei Seitenansichten innerhalb scroll Ansicht

Wenn die Hauptansicht (der oben erwähnte Eltern-View-Controller) lädt, es geht durch die üblichen viewDidLoad, viewWillAppear, viewWillLoadSubviews .... und es ist dort, dass alle oben genannten Ansichten geladen, angelegt und gezeichnet werden.

Nichts geschieht, um diese drei Seitencontroller zum Laden zu veranlassen.

+0

Vielen Dank für die detaillierte Antwort und Sie sind richtig mit Ihren Stichpunkten. Aus meinem Verständnis heraus, während ich zu den 3 View-Controllern scrolle, die sich in der Scroll-Ansicht befinden, würde viewDidAppear usw. nicht mehr ausgelöst werden, da sie geladen wurden? Auch wenn ich zum nächsten blättern gehe? (wirklich neu dazu!) Auch ich dachte "Was würde diese View-Controller veranlassen, durch ihre Lebenszyklen zu fahren?" wäre, wenn ich in dieser bestimmten Ansicht scrollte, würde es dazu führen, dass es ausgeführt wird. Aber ich denke nicht? – user7097242

+0

Ich habe versucht, dies zuvor in Ihrer vorherigen Frage zu fragen - was ist der Grund für diese 3 VCs? Verwechseln Sie UIViews nicht mit UIViewControllern. (Es ist ein häufiger Fehler für Neulinge, und ich sage das in Bezug auf Sie.) Die Art und Weise arbeiten ist die "Eltern VC" steuert die Bildlaufansicht ** und ** alle Ansichten darin. In einer alten Version meiner App hatte ich ein UIPageView und ein UIScrollView, das mit zwei GLKViews (ähnlich wie UIViews) darin funktionierte. Alles - das Laden der Bilder, das Scroll-Fenster, das Ändern der Seitenkontrolle - wurde mit einem einzigen UIViewController bearbeitet. Ich füge hinzu .... – dfd

+0

Ich habe die Bildverarbeitung auf Funktionen in einem Framework ausgelagert, weil ich diesen Code teilen wollte. Ich habe das automatische Layout in eine andere Datei ausgelagert. Ich habe die Verarbeitung der Bildlaufansicht und der Seitenaufsichtsdelegaten in eine UIViewController-Erweiterung verschoben. Sonst hätten Sie einen massiven View-Controller. Ich habe auch ein paar andere Erweiterungen gemacht. Aber der Hauptpunkt dieser beiden Kommentare ist - ich denke, es sei denn, Sie haben einen besonderen Bedarf ** (und es kann einen geben), um Ihre Ansichten in Ihrer Bildlaufansicht haben ihren eigenen Controller haben, sind Sie einen Pfad mit unbeabsichtigte Nebenwirkungen. – dfd

Verwandte Themen