标签:
#import "LZPStatuesClickWindow.h"
//定义一个全局变量
//整个程序的生命周期都存在;
UIWindow * _statueWindow;
@interface LZPStatuesClickWindow ()
@end
@implementation LZPStatuesClickWindow
+(void)show{
//需要在info.plst中设置status的管理(不让系统管理status);
//1.自定义window的级别要高
//2.自定要window需要强引用
//3.如果点击一个类,没有调用该类的方法,则看一下这个对象是什么类型;(如果对象和方法的类不是同一个类,就不会调用);
UIApplication * application = [UIApplication sharedApplication];
//该处请注意,创建一个窗口,如果是使用window创建,在被点击的时候,就不会响应该类中的touch方法;该类是继承UIWindow,所以在外面调用该方法的时候是该类调用,所以这里使用self,即该类本身;
UIWindow * statueWindow = [[self alloc] initWithFrame:application.statusBarFrame];
//设置级别,不设置会显示在下方,被主窗口盖住;
statueWindow.windowLevel = UIWindowLevelAlert;
//窗口需要设置根控制器
statueWindow.rootViewController = [[UIViewController alloc] init];
//当有多个窗口显示的的时候,非主窗口就会隐藏,在这里设置显示
statueWindow.hidden = NO;
//设置窗口属性,下面会用到;
_statueWindow = statueWindow;
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
UIWindow * keyWidow = [UIApplication sharedApplication].keyWindow;
[self setViewController:keyWidow];
}
//该方法遍历UIApplication的主窗口下所有的子控件,知道遍历出我们想要的;
//使用递归,一层一层的遍历
-(void)setViewController:(UIView *)view{
for (UIView * childView in view.subviews) {
if ([childView isKindOfClass:[UITableView class]]) {
//强制转换一下,才会有tableview的属性
UITableView * tableView = (UITableView *)childView;
[tableView setContentOffset:CGPointMake(0, -tableView.contentInset.top) animated:YES];
}
[self setViewController:childView];
}
}
application.statusBarHidden = NO;
[LZPStatuesClickWindow show];
标签:
原文地址:http://blog.csdn.net/batac_lee/article/details/51354119