Holen Sie sich die aktuellen view-controller aus dem app delegate (modal ist möglich)
Ich weiß, dass, um die aktuelle view-controller aus dem app delegate, ich kann die navigationController
Eigenschaft, die ich eingerichtet habe für meine app. Es ist jedoch möglich, in vielen Orten überall in meiner app, dass ein modal-navigation-controller hätte vorgelegt werden können. Gibt es eine Möglichkeit, zu erkennen, diese aus dem app delegieren, da die aktuelle Navigations-controller wird anders sein als das, was die app Delegat einen Verweis?
- Speziell möchte ich zum erkennen der aktuellen view-controller aus
- (void)applicationDidEnterBackground:(UIApplication *)application
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schlage ich vor, Sie NSNofiticationCenter.
applicationWillResignActive
aufgerufen wird, bevorapplicationDidEnterBackground
. Und ich mag deine Idee und werde es nutzen!Basiert auf der gist hier, ich habe eine Kategorie, um zu erhalten die meisten top-view-controller, so dass der Aufruf
[[UIApplication sharedApplication] topMostViewController]
geben Ihnen die meisten top-view-controller in Ihrem app.Dies ist besonders nützlich in iOS 8, wo
UIAlertView
undUIActionSheet
wurden verworfen zugunsten vonUIAlertController
, das muss präsentiert werden die meisten top-view-controller.UIViewController+TopMostViewController.h
UIViewController+TopMostViewController.m
Dieser arbeitete für mich. Ich habe viele Ziele, haben unterschiedliche Steuerungen, so dass die vorherigen Antworten nicht zu funktionieren schien.
zunächst möchten Sie diese in Ihrem AppDelegate Klasse:
dann in Ihrer Funktion
use of unresolved identifire 'window'
auf Zeile einslet navi....
Könnten Sie versuchen, immer die meisten top - Ansicht by doing:
obwohl diese Ansicht könnte unsichtbar sein oder sogar unter einigen seiner Untersichten...
Hängt es von der Benutzeroberfläche, aber es könnte helfen.
Große Lösung in Swift, implementieren Sie in AppDelegate
Objective - C
UISplitViewController
? Kann nicht testen Sie es jetzt, aber ich fürchte, es wird nicht funktionieren??Wenn Sie den navigation-controller in der App Delegieren, verwenden Sie einfach die visibleViewController Eigenschaft. Es wird Ihnen die sichtbaren Steuerung, auch wenn es modal.
In swift können Sie das aktive ViewController wie diese :
Die beste Lösung, funktioniert auch mit
moreNavigationController
imUITabBarController
:Code unten funktioniert sehr gut.
+(UIViewController*) findBestViewController:(UIViewController*)vc {
}
+(UIViewController*) currentViewController {
}
Anderen oben genannten Lösungen funktionieren nur teilweise komplexer Hierarchien werden nicht behandelt (navigation-controller integriert in der tab-bar-controller, split-view-Controller, view-Containern und auch Alarm-Controller könnte Durcheinander zu bringen).
Ich weiß die Frage wurde über Objective-C, aber ich kann nur Swift-code und ich bin sicher, es wird nützlich sein, um beide Arten von Benutzern.
Ersten: ich habe implementiert ein Protokoll, um die Dinge sauber und wiederverwendbar:
Zweiten: ich habe einen Verweis auf AppDelegate:
Dritten: ich habe die aktuelle view-controller viewDidAppear():
Viertens: