iOS开发

iOS hook(runtime) viewController

2020-12-17  本文已影响0人  BlackStar暗星

因为 项目 的 VC 比较多了,现在想统一处理背景色,想要使用 runtime 方法交换,hook viewcontrollerviewDidLoad 方法,发现设置背景色后, UINavigationpushpop 都出现了问题 ,添加控件也会有UI问题,解决后,记录下坑点

#import "UIViewController+WhiteController.h"

#import <objc/runtime.h>

@implementation UIViewController (WhiteController)

+(void)load{
    Method org_viewdidload = class_getInstanceMethod(self, @selector(viewDidLoad));
    Method new_bsviewdidload = class_getInstanceMethod(self, @selector(bsViewDidLoad));
    method_exchangeImplementations(org_viewdidload, new_bsviewdidload);
}


-(void)bsViewDidLoad{
    [self bsViewDidLoad];
    // 这两个 VC 导致出了问题
    Class inputClass = NSClassFromString(@"UIInputWindowController");
    Class editClass = NSClassFromString(@"UIEditingOverlayViewController");

    if (![self isKindOfClass:[UINavigationController class]] && ![self isKindOfClass:inputClass]&& ![self isKindOfClass:editClass]) {
        
        self.view.backgroundColor = [UIColor whiteColor];
    }
}

其实就是堆栈多了两个 Controller 如图:

WeChatb528c13b8a0605511de759d847d3beb5.png

把这两个 VC 过滤掉就可以了。在我们添加控件的时候,也要注意,什么VC 添加 UI控件,需要把不需要的过滤掉

上一篇 下一篇

猜你喜欢

热点阅读