現在表示されている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" {
//画面遷移の処理
}
}