iphone - unity - So finden Sie root UIViewController



objective-c ios (4)

Ich habe eine Ansicht, die UIViewController (root) ist, die Anzeigen und einen UINavigationController . In diesem UINavigationController habe ich typische Schichten von Controllern. In meinem Tabellenansicht-Controller für benutzerdefinierte Einstellungen habe ich eine Schaltfläche, mit der Sie mich kontaktieren können. Wenn der Benutzer auf diese Schaltfläche klickt, erstelle ich einen MFMailComposeViewController und möchte ihn präsentieren. Ich kann es nicht aus der Einstellungen-Tabellenansicht heraus darstellen, da es unter meinen Anzeigen liegt. Daher muss ich auf die Stammansicht verweisen und sie von dort aus präsentieren. Ich habe self.parentViewController.parentViewController wo self ist die Einstellungstabelle Ansicht, aber das funktioniert nicht. Wie soll ich darauf verweisen? Es scheint ein schlechtes Design zu sein, die Wurzelansicht direkt zu referenzieren und an die Einstellungsansicht zu übergeben.

https://ffff65535.com


Benutze die App Singleton. Etwas wie:

[[[UIApplication sharedApplication] delegate] rootViewController] sollte es bekommen, wenn Ihr viewController, der das root heißt, rootViewController


Du kannst das immer mit 1 Codezeile lösen, aber ich empfehle diesen schnellen Weg es zu tun, du kannst es von überall anrufen, es ist auch ein Absturz und ein Bug-Safe:

/// EZSwiftExtensions - Gives you the VC on top so you can easily push your popups
var topMostVC: UIViewController? {
    var presentedVC = UIApplication.sharedApplication().keyWindow?.rootViewController
    while let pVC = presentedVC?.presentedViewController {
        presentedVC = pVC
    }

    if presentedVC == nil {
        print("EZSwiftExtensions Error: You don't have any views set. You may be calling them in viewDidLoad. Try viewDidAppear instead.")
    }
    return presentedVC
}

Es ist als Standardfunktion enthalten in:

https://github.com/goktugyil/EZSwiftExtensions


Nach meiner Erfahrung ist dies die ideale Lösung, um den rootViewController :

[[[[UIApplication sharedApplication] delegate] window] rootViewController]

Hinweis: Im Falle eines aktiven UIAlert oder UIActionSheet Sie das UIActionSheet oder Aktionsblatt als Ihr Schlüsselfenster.


Rufen Sie das UIApplication-Objekt ab. Durchlaufen Sie das Windows-Array, um das keyWindow zu finden. Und dann hol dir die rootViewController-Eigenschaft.





ipad