2016-06-10 8 views
0

Ich bekomme eine Warnung "in einer etwas spezialisierten Architektur Warnung" Controller auf abgelösten Ansicht Controller entmutigen ". Und - es gibt einige ziemlich große UI-Probleme, die daraus resultieren. Ich habe eine Architektur mit 2 verschiedenen nicht verbundenen Gruppen in meinem Storyboard. Die erste Gruppe ist die Hauptschnittstelle meiner App und enthält ein UIStackView. Die zweite Gruppe besteht aus einem UIView plus angehängten Popover-Segment, wie in der Abbildung unten gezeigt.Detached Controller Probleme auf einem dynamisch geladenen UIStackView

enter image description here

ich bevölkern die UIStackView der Gruppe dynamisch 1 mit bis zu 8 Instanzen des UIView der Gruppe 2. Diese in eine Funktion namens loadViews getan wird() in der UIStackView Unterklasse, die je nach Bedarf aufgerufen wird. Hier ist der gereinigt Pseudo-Code zur Erläuterung:

for i in 0 ..< green.count { 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let greenVC = storyboard.instantiateViewControllerWithIdentifier("greenViewController") as! GreenVC 
    greenVC.progressionStackView = self 
    greenVC.index = i; 

    greenViewControllers.append(greenVC) 

    if let greenView = greenVC.view as! GreenView! { 
     greenView.fillColor = UIColor.orangeColor() 
     greenView.setNeedsDisplay() 
     self.addArrangedSubview(greenView) 
    } 
} 

self.layoutIfNeeded() 

Jedes Mal, wenn ich die popover auslösen auf einem der eingebetteten grünen Ansichten in der Stapelansicht ich die Warnung erhalten von oben. Noch wichtiger ist, bei der Ausführung auf einem iPad im Split-View-Modus, verliert die Stapelansicht jedes Mal eine grüne Ansicht, bis keine mehr vorhanden sind. Letzteres ist nur ein Anzeigeproblem, da beim Aktualisieren alle Ansichten zurück sind.

Ich bin völlig ratlos und bin mir nicht sicher, wie ich das beheben oder die Dinge anders umsetzen kann. Wenn das Problem besteht, dass die geladenen Ansichten nicht angehängt sind, können sie "erneut angehängt" werden? Oder gibt es eine Möglichkeit, eine Stapelansicht mit bis zu 256 Ansichten dynamisch zu laden?

Antwort

0

Gelöst:

Eine weitere Lektion Xcode Warnungen Herz nehmen - auch wenn das Wort verwendet wird abgeraten. Wie in diesem Fall neigen die Dinge dazu, zu brechen. Die Lösung war im Nachhinein offensichtlich. Die neue Ansicht Controller, die als greenVC instanziiert wurden, hatten zum umgebenden Ansicht Controller angeschlossen werden - dh die, mehrere Schichten bis in der Ansichtshierarchie, die diesen UIStackView enthält:

vcContainingStackView.addChildViewController(greenVC) 

die Zeile oben genannt wird direkt vor greenVC Anfügen zu meinem Array von Viewed-Controllern. Natürlich muss jetzt removeFromParentViewController() aufgerufen werden, wo Instanzen von GreenVC entfernt werden, aber ansonsten ist es das. Die Warnung ist weg und ebenso das Problem der verschwindenden Ansichten.