因为 项目 的 VC 比较多了,现在想统一处理背景色,想要使用 runtime
方法交换,hook
viewcontroller
的 viewDidLoad
方法,发现设置背景色后, UINavigation
的 push
和 pop
都出现了问题 ,添加控件也会有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
如图:
把这两个 VC 过滤掉就可以了。在我们添加控件的时候,也要注意,什么VC 添加 UI控件,需要把不需要的过滤掉