Ich kämpfe darum, eine gute Lösung für dieses Problem zu finden. In der -viewWillDisappear:
Methode eines Ansichtscontrollers muss ich einen Weg finden, um festzustellen, ob ein Ansichtscontroller auf den Stapel des Navigationscontrollers verschoben wird oder ob der Ansichtscontroller verschwindet, weil er gelöscht wurde.
Im Moment setze ich Flaggen wie, isShowingChildViewController
aber es wird ziemlich kompliziert. Der einzige Weg, den ich zu erkennen glaube, ist die -dealloc
Methode.
ios
iphone
cocoa-touch
uiviewcontroller
uikit
Michael Wasserfall
quelle
quelle
viewWillAppear
es scheint, dass das viewControllers-Array in beide Richtungen gleich ist, unabhängig davon, ob der View-Controller durch Drücken oder etwas darüber angezeigt wird. Irgendwelche Ideen?viewDidLoad
während der gesamten Lebensdauer der App dauerhaft ist, sodass ich meine Aktionen nicht ausführen kann, da er nur einmal aufgerufen wird! Hmm, kniffliger!![viewControllers containsObject:self]
statt[viewControllers indexOfObject:self] == NSNotFound
? Stilwahl?-isMovingFromParentViewController
der unten genannten Methode können Sie testen, ob die Ansicht explizit geöffnet wird.Ich denke, der einfachste Weg ist:
Schnell:
quelle
Aus Apples Dokumentation in UIViewController.h:
Ja, der einzige dokumentierte Weg, dies zu tun, ist der folgende:
Swift 3 Version:
quelle
Wenn Sie wollen einfach nur wissen , ob Ihre Ansicht geknallt wird immer, ich gerade entdeckt , dass
self.navigationController
istnil
inviewDidDisappear
, wenn es aus dem Stapel von Controllern entfernt wird. Das ist also ein einfacher alternativer Test.(Dies stelle ich fest, nachdem ich alle möglichen anderen Verzerrungen ausprobiert habe. Ich bin überrascht, dass es kein Navigationscontroller-Protokoll gibt, mit dem ein Ansichtscontroller registriert werden kann, der bei Pops benachrichtigt werden soll. Sie können ihn nicht verwenden,
UINavigationControllerDelegate
da dies tatsächlich echte Anzeigearbeit ermöglicht.)quelle
Swift 4
quelle
In Swift:
quelle
Ich finde Apples Dokumentation dazu schwer zu verstehen. Diese Erweiterung hilft dabei, die Zustände bei jeder Navigation anzuzeigen.
quelle
Diese Frage ist ziemlich alt, aber ich habe sie zufällig gesehen, daher möchte ich Best Practice (afaik) veröffentlichen.
du kannst es einfach tun
quelle
Dies gilt für iOS7 , keine Ahnung, ob es für andere gilt. Soweit ich weiß, wurde in
viewDidDisappear
der Ansicht bereits geknallt. Das heißt, wenn Sie abfragen, erhaltenself.navigationController.viewControllers
Sie einenil
. Überprüfen Sie also einfach, ob das Null ist.TL; DR
quelle
Segues können eine sehr effektive Möglichkeit sein, dieses Problem in iOS 6+ zu lösen. Wenn Sie dem bestimmten Abschnitt in Interface Builder eine Kennung gegeben haben, können Sie diese einchecken
prepareForSegue
.quelle
Danke @Bryan Henry, arbeitet immer noch in Swift 5
quelle
Ich gehe davon aus, dass Sie meinen, dass Ihre Ansicht durch Drücken einer neuen Ansicht auf den Stapel des Navigationscontrollers verschoben wird, wenn Sie sagen, dass sie auf den Stapel verschoben wurde. Ich würde vorschlagen , die unter Verwendung von
viewDidUnload
Verfahren zur Herstellung einer hinzuzufügenNSLog
Anweisung zu schreiben , etwas an die Konsole , so dass Sie sehen können , was los ist, können Sie eine hinzufügen möchtenNSLog
zuviewWillDissappeer
.quelle
Hier ist eine Kategorie, um das Gleiche wie die Antwort von sbrocket zu erreichen:
Header:
Quelle:
quelle