[Ios] Wie überprüfen Sie die aktuelle View-Controller-Klasse in Swift?


Answers

Aktualisiert für den swift3-Compiler und ?

if let wd = UIApplication.shared.delegate?.window {
        var vc = wd!.rootViewController
        if(vc is UINavigationController){
            vc = (vc as! UINavigationController).visibleViewController

        }

        if(vc is LogInViewController){
            //your code
        }
    }
Question

Soweit ich weiß, würde dies in Objective-C funktionieren:

self.window.rootViewController.class == myViewController

Wie kann ich überprüfen, ob der aktuelle View-Controller ein bestimmter ist?




Ich musste den aktuellen viewController in AppDelegate finden. Ich habe das benutzt

//at top of class
var window:UIWindow?

// inside my method/function
if let viewControllers = window?.rootViewController?.childViewControllers {
    for viewController in viewControllers {
        if viewController.isKindOfClass(MyViewControllerClass) {
            println("Found it!!!")
            }
        }
    }



Für Typen, die Sie verwenden können, und wenn es Ihre eigene Viewcontroller-Klasse ist, müssen Sie isKindOfClass wie isKindOfClass :

let vcOnTop = self.embeddedNav.viewControllers[self.embeddedNav.viewControllers.count-1]
            if vcOnTop.isKindOfClass(VcShowDirections){
                return
            }



let viewControllers = navController?.viewControllers
        for aViewController in viewControllers! {

            if aViewController .isKind(of: (MyClass?.classForCoder)!) {
                _ = navController?.popToViewController(aViewController, animated: true)
            }
        }



Schnell 3

Ich bin mir nicht sicher, ob es euch geht, aber ich habe eine schwere Zeit mit dieser. Ich habe so etwas gemacht:

if let window = UIApplication.shared.delegate?.window {
    if var viewController = window?.rootViewController {
        // handle navigation controllers
        if(viewController is UINavigationController){
            viewController = (viewController as! UINavigationController).visibleViewController!
        }
        print(viewController)
    }
}

Ich habe immer den ersten View-Controller meiner App erhalten. Aus irgendeinem Grund wollte es den Root View Controller behalten, egal was passiert. Also habe ich gerade eine globale String-Variable currentViewController und setze ihren Wert selbst in jedem viewDidLoad() . Alles, was ich brauchte, war zu sagen, auf welchem ​​Bildschirm ich war und das funktioniert perfekt für mich.