現在表示されているViewControllerのクラス名を取得する

dualshock4からの操作でボタンを押されたときに遷移する動きを作りたかったのですが、ボタンを押すたびに遷移してしまっていたので先頭のViewControllerのクラス名で判定しました。

extension

UIViewControllerとUIApplicationに以下のようにExtensionを設定しておきます。

extension UIViewController {
    var className: String {
        return String(describing: type(of: self))
    }
}

extension UIApplication {
    class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let navigationController = controller as? UINavigationController {
            return topViewController(controller: navigationController.visibleViewController)
        }
        if let tabController = controller as? UITabBarController {
            if let selected = tabController.selectedViewController {
                return topViewController(controller: selected)
            }
        }
        if let presented = controller?.presentedViewController {
            return topViewController(controller: presented)
        }
        return controller
    }
}

使い方

    if let topController = UIApplication.topViewController()  {
            if topController.className == "目当てのVuewController" {
                //画面遷移の処理
            }
        }

参考文献

【Swift】最前面のUIViewControllerを取得する方法

Swift4でのクラス名取得方法まとめ

Swift

前の記事

ScrollViewの設定あれやこれや
Swift

次の記事

CustomViewの便利なExtension