• 点击状态栏返回顶部


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

    设想一:监听状态栏点击

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

    设想二:往窗口上添加一个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;
    }
  • 相关阅读:
    operator[],识别读操作和写操作
    COW写时复制
    嵌套类,PIMPL
    类型转换
    String类运算符重载,自己实现
    socket的几个配置函数
    TCP三次握手,四次挥手,状态变迁图
    运算符重载
    友元
    P4016 负载平衡问题(最小费用最大流)
  • 原文地址:https://www.cnblogs.com/lyz0925/p/11715176.html
Copyright © 2020-2023  润新知