OC获取当前的UIViewController或者RootViewController

为UIViewController添加分类CurrentViewController

  • h文件
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIViewController (CurrentViewController)

+ (UIViewController *)getRootViewController;
+ (UIViewController *)getCurrentViewController;

@end

NS_ASSUME_NONNULL_END```
  • m文件
#import "UIViewController+CurrentViewController.h"

@implementation UIViewController (CurrentViewController)


 + (UIViewController *)getRootViewController{
    
    
    UIWindow* window = [[[UIApplication sharedApplication] delegate] window];
    NSAssert(window, @"The window is empty");
    return window.rootViewController;
}

 + (UIViewController *)getCurrentViewController {
    
    
    UIViewController* currentViewController = [self getRootViewController];
    BOOL runLoopFind = YES;
    while (runLoopFind) {
    
    
        if (currentViewController.presentedViewController) {
    
    
            currentViewController = currentViewController.presentedViewController;
        } else {
    
    
            if ([currentViewController isKindOfClass:[UINavigationController class]]) {
    
    
                currentViewController = ((UINavigationController *)currentViewController).visibleViewController;
            } else if ([currentViewController isKindOfClass:[UITabBarController class]]) {
    
    
                currentViewController = ((UITabBarController* )currentViewController).selectedViewController;
            } else {
    
    
                break;
            }
        }
    }
    return currentViewController;
}
@end
  • 使用
	//__weak避免循环引用
	__weak UIViewController *currentVC = [UIViewController getCurrentViewController];
	[currentVC.navigationController pushViewController:vc animated:YES];

猜你喜欢

转载自blog.csdn.net/weixin_46926959/article/details/122988416