你如何检查Swift中的当前视图控制器类?

use*_*039 64 ios swift

据我所知,这可以在Objective-C中使用:

self.window.rootViewController.class == myViewController
Run Code Online (Sandbox Code Playgroud)

如何检查当前视图控制器是否是特定的视图控制器?

mc0*_*c01 71

要检查Swift中的类,请使用"is"(如"Swift编程指南"中的"类型转换"一章中的"检查类型"中所述)

if self.window.rootViewController is MyViewController {
    //do something if it's an instance of that class
}
Run Code Online (Sandbox Code Playgroud)

  • 变量`self.window`不存在 (3认同)

小智 43

针对swift3编译器进行了更新,使其更加贴合!和?

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
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 没有 self.window 这样的东西 (2认同)
  • 太棒了,这对我有用.而不是`self.window`使用`self.view.window` (2认同)

Kir*_*apa 18

如果使用导航控制器,则可以轻松迭代视图控制器.然后您可以检查特定实例:

if let viewControllers = navigationController?.viewControllers {
    for viewController in viewControllers {
        // some process
        if viewController.isKindOfClass(MenuViewController) {
            println("yes it is")
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)


小智 10

我必须在AppDelegate中找到当前的viewController.我用过这个

//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!!!")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)


Chr*_*cou 7

试试这个

if self is MyViewController {        

}
Run Code Online (Sandbox Code Playgroud)


Kor*_*inW 7

要取消Thapa的答案,你需要在使用之前转换到viewcontroller类...

   if let wd = self.view.window {
        var vc = wd.rootViewController!
        if(vc is UINavigationController){
            vc = (vc as! UINavigationController).visibleViewController
        }
        if(vc is customViewController){
            var viewController : customViewController = vc as! customViewController
Run Code Online (Sandbox Code Playgroud)


Tre*_*v14 7

斯威夫特3

不确定你们,但我很难用这个.我做了这样的事情:

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直得到我的应用程序的初始视图控制器.出于某种原因,它想要保留根视图控制器,无论如何.所以我只创建了一个全局字符串类型变量,currentViewController并在每个变量中设置其值viewDidLoad().我所需要的只是告诉我在哪个屏幕上,这对我来说非常适合.


Dar*_*ary 7

斯威夫特 4、斯威夫特 5

let viewController = UIApplication.shared.keyWindow?.rootViewController
if viewController is MyViewController {

}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

107058 次

最近记录:

6 年,1 月 前