1、在
AppDelegate 判断是不是点击了状态栏
2、判断当前view是否在主窗口,并且是显示状态
//是否显示
#import
"UIView+XMGExtension.h"
(
BOOL
)isShowingOnKeyWindow
{
// 主窗口
UIWindow *keyWindow = [ UIApplication sharedApplication ]. keyWindow ;
// 以主窗口左上角为坐标原点 , 计算 self 的矩形框
CGRect newFrame = [keyWindow convertRect : self . frame fromView : self . superview ];
CGRect winBounds = keyWindow. bounds ;
// 主窗口的 bounds 和 self 的矩形框 是否有重叠
BOOL intersects = CGRectIntersectsRect (newFrame, winBounds);
return ! self . isHidden && self . alpha > 0.01 && self . window == keyWindow && intersects;
// 主窗口
UIWindow *keyWindow = [ UIApplication sharedApplication ]. keyWindow ;
// 以主窗口左上角为坐标原点 , 计算 self 的矩形框
CGRect newFrame = [keyWindow convertRect : self . frame fromView : self . superview ];
CGRect winBounds = keyWindow. bounds ;
// 主窗口的 bounds 和 self 的矩形框 是否有重叠
BOOL intersects = CGRectIntersectsRect (newFrame, winBounds);
return ! self . isHidden && self . alpha > 0.01 && self . window == keyWindow && intersects;
}
//点击判断
- (
void
) touchesBegan:(
NSSet
*)touches withEvent:(
UIEvent
*)event {
[ super touchesBegan :touches withEvent :event];
CGPoint location = [[[event allTouches ] anyObject ] locationInView :[ self window ]];
CGRect statusBarFrame = [ UIApplication sharedApplication ]. statusBarFrame ;
statusBarFrame. origin . y += 0.5 ;
if ( CGRectContainsPoint (statusBarFrame, location)) {
[ self windowClick ];
}
}
- ( void )windowClick
{
UIWindow *window = [ UIApplication sharedApplication ]. keyWindow ;
[ self searchScrollViewInView :window];
}
[ super touchesBegan :touches withEvent :event];
CGPoint location = [[[event allTouches ] anyObject ] locationInView :[ self window ]];
CGRect statusBarFrame = [ UIApplication sharedApplication ]. statusBarFrame ;
statusBarFrame. origin . y += 0.5 ;
if ( CGRectContainsPoint (statusBarFrame, location)) {
[ self windowClick ];
}
}
- ( void )windowClick
{
UIWindow *window = [ UIApplication sharedApplication ]. keyWindow ;
[ self searchScrollViewInView :window];
}
//判断是否为
UIScrollView
- (
void
)searchScrollViewInView:(
UIView
*)superview
{
for ( UIScrollView *subview in superview. subviews ) {
// 如果是 scrollview, 滚动最顶部
if ([subview isKindOfClass :[ UIScrollView class ]] && subview. isShowingOnKeyWindow ) {
CGPoint offset = subview. contentOffset ;
offset. y = - subview. contentInset . top ;
[subview setContentOffset :offset animated : YES ];
}
// 继续查找子控件
[ self searchScrollViewInView :subview];
}
{
for ( UIScrollView *subview in superview. subviews ) {
// 如果是 scrollview, 滚动最顶部
if ([subview isKindOfClass :[ UIScrollView class ]] && subview. isShowingOnKeyWindow ) {
CGPoint offset = subview. contentOffset ;
offset. y = - subview. contentInset . top ;
[subview setContentOffset :offset animated : YES ];
}
// 继续查找子控件
[ self searchScrollViewInView :subview];
}
}