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

本文介绍了一种方法来判断iOS应用中用户是否点击了状态栏,并通过一系列的子视图遍历找到UIScrollView,将其滚动到顶部。该方案适用于需要响应状态栏点击并作出特定反馈的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值