In iOS6 ist mir die neue Containeransicht aufgefallen, ich bin mir jedoch nicht ganz sicher, wie ich über die enthaltene Ansicht auf den Controller zugreifen soll.
Szenario:
Ich möchte über den Ansichtscontroller, in dem sich die Containeransicht befindet, auf die Beschriftungen im Alert View Controller zugreifen.
Es gibt einen Übergang zwischen ihnen, kann ich das nutzen?
ios
objective-c
swift
uiviewcontroller
uicontainerview
Adam Waite
quelle
quelle
Antworten:
Ja, Sie können den Abschnitt verwenden, um Zugriff auf den untergeordneten Ansichtscontroller (und seine Ansicht und Unteransichten) zu erhalten. Geben Sie dem Segue
alertview_embed
mithilfe des Attributinspektors im Storyboard eine Kennung (z. B. ). Lassen Sie dann den übergeordneten Ansichtscontroller (der die Containeransicht enthält) eine Methode wie die folgende implementieren:quelle
Sie können dies einfach mit tun
self.childViewControllers.lastObject
(vorausgesetzt, Sie haben nur ein Kind, andernfalls verwendenobjectAtIndex:
).quelle
childViewControllers
"zu früh"für die schnelle Programmierung
du kannst so schreiben
quelle
Der
prepareForSegue
Ansatz funktioniert, basiert jedoch auf der magischen Zeichenfolge der Segue-Kennung. Vielleicht gibt es einen besseren Weg.Wenn Sie die Klasse des VC kennen, nach dem Sie suchen, können Sie dies mit einer berechneten Eigenschaft sehr gut tun:
Dies hängt davon ab
childViewControllers
. Obwohl ich der Meinung bin, dass es fragil sein könnte, sich auf die erste zu verlassen, lässt die Benennung der Klasse, die Sie suchen, dies ziemlich solide erscheinen.quelle
return childViewControllers.filter { $0 is CamperVanViewController }.first
in einem EinzeilerchildViewControllers.flatMap({ $0 as? CamperVanViewController }).first
was ich für ein bisschen besser halte, da es keine Nullen wirft und beseitigt.first(where:)
.childViewControllers.first(where: { $0 is CamperVanViewController })
Eine aktualisierte Antwort für Swift 3 unter Verwendung einer berechneten Eigenschaft:
Dadurch wird nur die Liste der untergeordneten Elemente wiederholt, bis die erste Übereinstimmung erreicht ist.
quelle
self.childViewControllers
ist relevanter, wenn Sie die Kontrolle des Elternteils benötigen. Wenn es sich bei dem untergeordneten Controller beispielsweise um eine Tabellenansicht handelt und Sie sie zwangsweise neu laden oder eine Eigenschaft über ein Tastendruck oder ein anderes Ereignis auf dem übergeordneten View Controller ändern möchten, können Sie dies tun, indem Sie auf die Instanz von ChildViewController zugreifen und nicht über prepareForSegue. Beide haben ihre Anwendungen auf unterschiedliche Weise.quelle
Es gibt eine andere Möglichkeit, die switch-Anweisung von Swift für den Typ des View-Controllers zu verwenden:
quelle
Ich benutze Code wie:
quelle
Falls jemand nach Swift 3.0 sucht ,
Auf viewController1 , viewController2 usw. kann dann zugegriffen werden.
quelle
Mit Generika können Sie einige süße Dinge tun. Hier ist eine Erweiterung von Array:
Sie können dies dann in Ihrem viewController tun:
quelle
du kannst so schreiben
quelle