iOS 获取状态栏图标

方式一: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对象

你可能感兴趣的:(iOS 获取状态栏图标)