方式一:KVC
KVC是一个很好的东西,通过它往往可以做些不可思议的东西,比如访问对象的一些私有属性
利用这一点,我们可以获取到UIStatusBar
UIApplication *app = [UIApplication sharedApplication];
UIView *statusView = [app valueForKey:@"statusBar"];
statusView.backgroundColor = [UIColor cyanColor];
NSArray *subViews = [[statusView valueForKey:@"foregroundView"] subviews];
方式二:runtime
说思路,首先UIStatusBar这个类是可以访问的,不属于私有类,既然如此就可以利用runtime来做点东西!
1.使用runtime给UIStatusBar添加一个实例方法,这里暂且叫: instanceMethod
2.添加instanceMethod成功后,使用class_replaceMethod将instanceMethod与实例方法hook_ instanceMethod做替换
3.在实例方法hook_ instanceMethod中接收self,则该self即为UIStatusBar对象,这样我们就成功的拿到UIStatusBar对象
网友评论