此文章已于 2020.06.19 更新,基于 Swift 5.2
在項目中,我們經(jīng)常需要獲取當(dāng)前所看到的View Controller,比如從其他App跳回我們的App中時,我們可能需要當(dāng)前View Controller做些事情。那么怎么獲取到當(dāng)前的View Controller呢?其實非常簡單:
/// 返回當(dāng)前的View Controller
///
/// - Parameter base: 迭代起點
/// - Returns: 當(dāng)前的View Controller
class func getCurrentViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController {
return getCurrentViewController(base: nav.visibleViewController)
}
if let tab = base as? UITabBarController {
return getCurrentViewController(base: tab.selectedViewController)
}
if let presented = base?.presentedViewController {
return getCurrentViewController(base: presented)
}
return base
}
給UIViewController加一類方法,靜態(tài)地獲取當(dāng)前View Controller。這基本上滿足了絕大多數(shù)情況了。使用時只需:
let currentViewController = UIViewController.getCurrentViewController()
點擊查看參考來源,Enjoy!