OC Extension GetVC(獲取控制器)
阿新 • • 發佈:2021-02-09
技術標籤:UI的封裝iosobjective-cswiftxcode
**
一直覺得自己寫的不是技術,而是情懷,一個個的教程是自己這一路走來的痕跡。靠專業技能的成功是最具可複製性的,希望我的這條路能讓你們少走彎路,希望我能幫你們抹去知識的蒙塵,希望我能幫你們理清知識的脈絡,希望未來技術之巔上有你們也有我。
**
.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface GetVC : NSObject
//獲取跟控制器
+ (UIViewController * )getRootViewController;
//獲取當前控制器
+ (UIViewController *)getCurrentViewController;
@end
NS_ASSUME_NONNULL_END
.m
#import "GetVC.h"
@implementation GetVC
+ (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]]) {
UINavigationController* navigationController = (UINavigationController* )currentViewController;
currentViewController = [navigationController.childViewControllers lastObject];
} else if ([currentViewController isKindOfClass:[UITabBarController class]]) {
UITabBarController* tabBarController = (UITabBarController* )currentViewController;
currentViewController = tabBarController.selectedViewController;
} else {
NSUInteger childViewControllerCount = currentViewController.childViewControllers.count;
if (childViewControllerCount > 0) {
currentViewController = currentViewController.childViewControllers.lastObject;
return currentViewController;
} else {
return currentViewController;
}
}
}
return currentViewController;
}
@end
使用
//獲取當前控制器
NSLog(@"獲取當前控制器: %@",[GetVC getCurrentViewController]);
//獲取根控制器
NSLog(@"獲取根控制器: %@",[GetVC getRootViewController]);