Aktuellen View-Controller vom App-Delegaten abrufen (modal ist möglich)

7

Ich weiß, dass ich die navigationController -Eigenschaft, die ich für meine App eingerichtet habe, verwenden kann, um den aktuellen View-Controller vom App-Delegaten zu erhalten. Es ist jedoch an vielen Stellen in meiner App möglich, dass ein modaler Navigationscontroller präsentiert wurde. Gibt es eine Möglichkeit, dies über den Anwendungsdelegaten zu erkennen, da der aktuelle Navigationscontroller sich von dem unterscheidet, an dem der Anwendungsdelegat eine Referenz enthält?

    
Mason 10.12.2013, 03:39
quelle

10 Antworten

7

Ich schlage vor, Sie verwenden NSNofiticationCenter.

%Vor%     
ziggear 10.12.2013, 05:48
quelle
9

Basierend auf dem Stichwort hier habe ich eine Kategorie erstellt, um den obersten View-Controller zu erhalten, so dass% co_de aufgerufen wird Mit% erhalten Sie den obersten View-Controller in Ihrer App.

Dies ist besonders nützlich in iOS 8, wo [[UIApplication sharedApplication] topMostViewController] und UIAlertView zugunsten von UIActionSheet veraltet sind, was auf dem obersten View-Controller angezeigt werden muss.

UIViewController + TopMostViewController.h

%Vor%

UIViewController + TopMostViewController.m

%Vor%     
junjie 14.11.2014 07:41
quelle
4

Das hat für mich funktioniert. Ich habe viele Ziele mit unterschiedlichen Controllern, daher schienen vorherige Antworten nicht zu funktionieren.

Zuerst möchten Sie dies in Ihrer AppDelegate-Klasse einfügen:

%Vor%

dann, in Ihrer Funktion

%Vor%     
CodeOverRide 23.04.2015 19:55
quelle
3

Sie können versuchen, die oberste Ansicht zu erhalten, indem Sie Folgendes tun:

%Vor%

obwohl diese Ansicht möglicherweise unsichtbar ist oder sogar von einigen ihrer Unteransichten abgedeckt wird ...

Es hängt von Ihrer Benutzeroberfläche ab, aber es könnte helfen.

    
Milo 10.12.2013 03:53
quelle
3

Tolle Lösung in Swift, in AppDelegate implementieren

%Vor%

Ziel - C

%Vor%     
Edward Novelo 03.07.2015 22:50
quelle
1

Wenn Sie den Navigationscontroller im App-Delegaten haben, verwenden Sie einfach die visibleViewController Eigenschaft. Es wird Ihnen den sichtbaren Controller geben, auch wenn es modal ist.

    
hukir 10.12.2013 03:54
quelle
1

In swift können Sie den aktiven ViewController wie folgt aufrufen:

%Vor%     
jmcastel 07.01.2015 09:41
quelle
0

Die beste Lösung, funktioniert auch mit moreNavigationController in UITabBarController :

%Vor%     
Bartłomiej Semańczyk 22.07.2015 07:34
quelle
0

Der folgende Code funktioniert sehr gut.

+ (UIViewController *) findBestViewController: (UIViewController *) vc {

%Vor%

}

+ (UIViewController *) currentViewController {

%Vor%

}

    
umitcel 21.02.2016 14:12
quelle
0

Andere oben genannte Lösungen funktionieren nur teilweise, da komplexe Ansichtshierarchien nicht behandelt werden (Navigationscontroller, integriert in Registerkarten-Controller, Split-View-Controller, View-Container und auch Alarm-Controller könnten Dinge vermasseln).

  

Ich löse das, indem ich eine Referenz des aktuellen View-Controllers einchecke   AppDelegieren. Jedes Mal, wenn die Ansicht erscheint, nutze ich    viewDidAppear(animated:) und setze den Verweis im App-Delegaten.

Ich weiß, dass die Frage über Objective-C lautete, aber ich kann nur Swift-Code bereitstellen und bin mir sicher, dass es für beide Arten von Benutzern nützlich sein wird.

Erstens: Ich habe ein Protokoll implementiert, um die Dinge sauber und wiederverwendbar zu halten:

%Vor%

Zweitens: Ich habe einen Verweis auf AppDelegate hinzugefügt:

%Vor%

Drittens: Ich setze den aktuellen View-Controller in viewDidAppear ():

%Vor%

Vierte:

%Vor%     
Andrej 16.08.2016 14:59
quelle