1. 程式人生 > 其它 >OC Extension GetVC(獲取控制器)

OC Extension GetVC(獲取控制器)

技術標籤: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]);