点击状态栏返回顶部

点击状态栏,回到顶部(系统自带就有),其实现原理:

设想一:监听状态栏点击

  不可取--因为获取不懂状态栏的控件,系统没有暴露

设想二:往窗口上添加一个View,挡住状态栏

  不可取--因为添加后,View视图还是在状态栏的下面,没法挡住;状态栏是另外一个窗口

设想三:创建状态栏窗口

  代码如下:

#import "StatueWindow.h"

//静态的全局变量
static StatueWindow *_statusW;

@implementation StatueWindow

+ (void)show {
    StatueWindow *statueW = [[StatueWindow alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 44)];
    statueW.backgroundColor = [UIColor redColor];
    statueW.rootViewController = [[UIViewController alloc] init];
    statueW.hidden = NO;
    statueW.windowLevel = UIWindowLevelAlert;
    
    //如果不设置这一行,是不会显示的,因为没有强应用,一调用就被释放掉了
    _statusW = statueW;

}


- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"---点击了状态栏-----");
    //拿到taleview返回到顶部
    
    //遍历窗口所有的子控件,看有没有tableView
    UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
    UITableView *tableView = [self fecthChildView:keyWindow];
    [tableView setContentOffset:CGPointMake(0, -tableView.contentInset.top)];
}

//获取控件的所有子控件
- (UITableView *)fecthChildView:(UIView *)view {
    for (UIView *childView in view.subviews) {
        if ([childView isKindOfClass:[UITableView class]]) {
            NSLog(@"----%@--",childView);
            return (UITableView *)childView;
        }
        UITableView *tableView =  [self fecthChildView:childView];
        if (tableView) {
            return tableView;
        }
    }
    return nil;
}

 

  创建完继承于UIWindow后的“StatueWindow”,将satueWindow添加到视图上:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.rootViewController = [[ViewController alloc] init];
    [self.window makeKeyAndVisible];
    
//    UIView *stateView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.window.bounds.size.width, 24)];
//    stateView.backgroundColor = [UIColor redColor];
//    [self.window addSubview:stateView];
    
    [StatueWindow show];
    
    return YES;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值