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

据我所知,这可以在Objective-C中工作:

self.window.rootViewController.class == myViewController 

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

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

 if self.window.rootViewController is MyViewController { //do something if it's an instance of that class } 

为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 } } 

如果您正在使用导航控制器,则可以轻松地遍历视图控制器。 然后你可以检查特定的实例:

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

我不得不在AppDelegate中find当前的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!!!") } } } 

要离开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 

Swift 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) } } 

我不断得到我的应用程序的初始视图控制器。 出于某种原因,无论如何,它都想保持根视图控制器。 所以我只是做了一个全局的stringtypesvariablescurrentViewController并在每个viewDidLoad()自己设置它的值。 我所需要的只是告诉我在哪个屏幕上,这对我来说是完美的。

尝试这个

 if self is MyViewController { } 

对于你可以使用的typesis ,如果它是你自己的viewcontroller类,那么你需要使用isKindOfClass像:

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

Swift 3 | 检查一个视图控制器是否是自己内部的根。

您可以从视图控制器访问window ,只需要使用self.view.window

上下文:我需要更新视图的位置,并在设备旋转时触发animation。 我只想在视图控制器处于活动状态时执行此操作。

 class MyViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver( self, selector: #selector(deviceDidRotate), name: .UIApplicationDidChangeStatusBarOrientation, object: nil ) } func deviceDidRotate() { guard let window = self.view.window else { return } // check if self is root view controller if window.rootViewController == self { print("vc is self") } // check if root view controller is instance of MyViewController if window.rootViewController is MyViewController { print("vc is MyViewController") } } } 

如果在MyViewController处于活动状态时旋转设备,则会看到上面的行显示在控制台上。 如果MyViewController不活动,你将不会看到它们。

如果您好奇我为什么使用UIDeviceOrientationDidChange而不是.UIDeviceOrientationDidChange ,请看这个答案 。

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