😇

Swift UIKit - 最前面のUIViewControllerの取得

2022/08/31に公開
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
        }
   }

}

簡単解説

  1. rootViewControllerは、UIApplicationから取ってくる
  2. UIViewControllerの可能性があるクラスに変更して、表示されているUIViewControllerを取得(この実装は使いそうなものだけで構成、他に実装したものがあれば追加が必要)
  3. UIViewControllerが戻るまで再帰呼び出し

関数にしたいときは、selfを引数に置き換えてください

Discussion