zoukankan      html  css  js  c++  java
  • 点击状态栏返回顶部

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

    设想一:监听状态栏点击

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

    设想二:往窗口上添加一个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;
    }
  • 相关阅读:
    BZOJ 1391: [Ceoi2008]order
    BZOJ 4504: K个串
    2019 年百度之星·程序设计大赛
    POJ 2398 Toy Storage (二分 叉积)
    POJ 2318 TOYS (二分 叉积)
    HDU 6697 Closest Pair of Segments (计算几何 暴力)
    HDU 6695 Welcome Party (贪心)
    HDU 6693 Valentine's Day (概率)
    HDU 6590 Code (判断凸包相交)
    POJ 3805 Separate Points (判断凸包相交)
  • 原文地址:https://www.cnblogs.com/lyz0925/p/11715176.html
Copyright © 2011-2022 走看看