美文网首页iOS开发
iOS hook(runtime) viewController

iOS hook(runtime) viewController

作者: BlackStar暗星 | 来源:发表于2020-12-17 17:03 被阅读0次

因为 项目 的 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控件,需要把不需要的过滤掉

相关文章

网友评论

    本文标题:iOS hook(runtime) viewController

    本文链接:https://www.haomeiwen.com/subject/ktbzgktx.html