😇
Swift UIKit - 最前面のUIViewControllerの取得
swift
// 1.
if let rvc = UIApplication.shared.windows.first(where: { $0.isKeyWindow })?.rootViewController {
let fvc = rvc.frontViewController
}
extension UIViewController {
public var frontViewController: UIViewController {
// 2.
let vc = (self as? UITabBarController)?.selectedViewController
?? (self as? UINavigationController)?.visibleViewController
?? self.presentedViewController
// 3.
if let frontVc = vc?.frontViewController {
return frontVc
} else {
return self
}
}
}
簡単解説
- rootViewControllerは、UIApplicationから取ってくる
- UIViewControllerの可能性があるクラスに変更して、表示されているUIViewControllerを取得(この実装は使いそうなものだけで構成、他に実装したものがあれば追加が必要)
- UIViewControllerが戻るまで再帰呼び出し
関数にしたいときは、selfを引数に置き換えてください
Discussion