多个tableview 点击状态栏当前scrollView滚动到顶部

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;
}

//点击判断
- ( 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];
}

//判断是否为 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];
    }
}

你可能感兴趣的:(iOS,开发)