你如何检查当前视图控制器类在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) } }