isBeingDismissed nicht in viewWillDisappear:
Ich habe einige code, um aufzuräumen in meinem viewWillDisappear:
, die ich nur nutzen wollen, wenn die Ansicht wieder zurück in die übergeordnete view-controller.
- (void)viewWillDisappear:(BOOL)animated
{
if ([self isMovingFromParentViewController] || [self isBeingDismissed]) {
NSLog(@"isMovingFromParentViewController or isBeingDismissed");
//clean up
}
[super viewWillDisappear:animated];
}
Ansicht dargestellt werden können, zwei Möglichkeiten: es kann geschoben werden durch ein navigation-controller oder als modal-view-controller (aus der gleichen navigation-controller). Wenn es geschoben, dann knallten (drücken der zurück-Taste), meine clean-up-code ausgeführt wird. Wenn er es präsentiert sich als ein modal-view-controller, dann entlassen, wird der code nicht ausgeführt.
Ich entlassen, etwa so:
[rootViewController dismissModalViewControllerAnimated:YES];
Meine Frage ist: warum ist nicht isBeingDismissed
gesetzt, wenn ich entlassen meine view controller?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Frage, wie Sie die Abberufung von Ihrem modal anzeigen. Wie ist rootViewController definiert?
Wenn ich rufe
[self dismissModalViewControllerAnimated:YES]
dann[self isBeingDismissed]
zu true ausgewertet wird.Wenn ich rufe
[parentViewController dismissModalViewControllerAnimated:YES]
dann[self isBeingDismissed]
zu true ausgewertet wird, wobei parentViewController ist der UIViewController, legte den modalen view (Anmerkung: nicht ein UINavigationController).isBeingDismissed()
zurückfalse
wenn der viewController ist angeblich tauchte aus einerUINavigationController
wie die detail-viewController in einem eingestürztenUISplitViewController
.Wenn das erste view-controller eine modal-navigation-controller wird abgewiesen, Berufung
self.isBeingDimissed()
ausviewWillDisappear:
zurückfalse
.Jedoch, da die gesamte navigation-controller wird entlassen, was tatsächlich funktioniert, ist
self.navigationController?.isBeingDismissed()
gibttrue
.Als @Yuval Tal erwähnt, wird dieses flag funktioniert nicht, wenn Sie entlassen-controller, eingebettet im inneren navigation-controller. Hier ist eine extension, die ich verwende:
Kann es leicht erweitert werden, wenn Sie finden, ein anderer Fall, wenn standard -
.isBeingDismissed
wird nicht funktionieren. Und wenn Sie einen finden, lassen Sie uns, lassen Sie mich wissen in den Kommentaren.Wenn durch Zufall Sie hierher kam, versucht die
isBeingDismissed
auf einem nicht-Modal dargestellt view-controller, können Sie immer überprüfen, dietopViewController
Eigentum IhrernavigationController
zum Beispiel: