iOS 獲取當前頁面的控制器

大家在開發的過程中,肯定會遇到一些情況,在一些工具類中需要獲取當前頁面的控制器。這里為大家提供一個方法方便大家使用:

OC版本:

#import "UIApplication+Extension.h"

@implementation UIApplication (Extension)

+(UIViewController *)topViewController:(UIViewController *)baseViewController {
    if (baseViewController == nil) {
        baseViewController = [[UIApplication sharedApplication] keyWindow].rootViewController;
    }
    
    if ([baseViewController isKindOfClass:[UINavigationController class]]) {
        return [UIApplication topViewController:((UINavigationController *)baseViewController).visibleViewController];
    }
    
    if ([baseViewController isKindOfClass:[UITabBarController class]]) {
        UIViewController *selectViewController = ((UITabBarController *)baseViewController).selectedViewController;
        if (selectViewController) {
            return [UIApplication topViewController:selectViewController];
        }
    }
    
    UIViewController *presentViewController = baseViewController.presentedViewController;
    if (presentViewController) {
        return [self topViewController:presentViewController];
    }
    
    return baseViewController;
}

@end

Swift版本:

import UIKit

extension UIApplication {
    
    class func topViewController(_ baseViewController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let navigationViewController = baseViewController as? UINavigationController {
            return topViewController(navigationViewController.visibleViewController)
        }
        
        if let tab = baseViewController as? UITabBarController {
            if let selected = tab.selectedViewController {
                return topViewController(selected)
            }
        }
        
        if let presented = baseViewController?.presentedViewController {
            return topViewController(presented)
        }
        
        return baseViewController
    }
    
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網絡請求組件 FMDB本地數據庫組件 SD...
    陽明AGI閱讀 16,018評論 3 119
  • 夫君子之行,靜以修身,儉以養德。非澹泊無以明志,非寧靜無以致遠。夫學須靜也,才須學也,非學無以廣才,非志無以成學。...
    安詳〇閱讀 272評論 0 0