自定义点击状态栏返回

点击屏幕最上方状态栏(status)时,如果当前是tableview或者是可以滚动的控件,就可以滚动到最上方的位置;

#import "LZPStatuesClickWindow.h"
//定义一个全局变量
//整个程序的生命周期都存在;
UIWindow * _statueWindow;
@interface LZPStatuesClickWindow ()
@end

@implementation LZPStatuesClickWindow

+(void)show{
    //需要在info.plst中设置status的管理(不让系统管理status);
    //1.自定义window的级别要高
    //2.自定要window需要强引用
    //3.如果点击一个类,没有调用该类的方法,则看一下这个对象是什么类型;(如果对象和方法的类不是同一个类,就不会调用);

    UIApplication * application = [UIApplication sharedApplication];
   //该处请注意,创建一个窗口,如果是使用window创建,在被点击的时候,就不会响应该类中的touch方法;该类是继承UIWindow,所以在外面调用该方法的时候是该类调用,所以这里使用self,即该类本身;

    UIWindow * statueWindow = [[self alloc] initWithFrame:application.statusBarFrame];
//设置级别,不设置会显示在下方,被主窗口盖住;
    statueWindow.windowLevel  = UIWindowLevelAlert;
//窗口需要设置根控制器
    statueWindow.rootViewController = [[UIViewController alloc] init];
//当有多个窗口显示的的时候,非主窗口就会隐藏,在这里设置显示
    statueWindow.hidden = NO;

   //设置窗口属性,下面会用到;
    _statueWindow = statueWindow;

}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    UIWindow * keyWidow = [UIApplication sharedApplication].keyWindow;
    [self setViewController:keyWidow];

}
//该方法遍历UIApplication的主窗口下所有的子控件,知道遍历出我们想要的;
//使用递归,一层一层的遍历
-(void)setViewController:(UIView *)view{
    for (UIView * childView in view.subviews) {

        if ([childView isKindOfClass:[UITableView class]]) {
            //强制转换一下,才会有tableview的属性
            UITableView * tableView = (UITableView *)childView;

            [tableView setContentOffset:CGPointMake(0, -tableView.contentInset.top) animated:YES];
        }
        [self setViewController:childView];
    }
}

在APPDelegate中调用:

application.statusBarHidden = NO;

一定要将系统的状态栏显示,因为当有多个窗口的时候系统状态栏会隐藏,默认是显示的

 [LZPStatuesClickWindow show];
时间: 2024-08-29 14:19:39

自定义点击状态栏返回的相关文章

iOS点击状态栏返回顶部问题。

在适配点击状态栏返回顶部的时候,有一个viewcontroller里面有一个UITableView和一个UITextView,UITableView的cell里面没有UIScrollView和UITableView,点击状态栏没有返回顶部,后来想了很久,才想起UITextView是可以滑动的,它是继承于UIScrollView<UITextInput>的,需要将UITextView 的scrollsToTop设置为NO.

ios设置点击状态栏返回到顶部

在一个scrollview中横向有多个tableview,点击状态栏,tableview要返回到顶部要将所有scrollview 以及tableview 的scrollToTop设置为NO.显示的tableview的scrollToTop设置为TRUE. @property(nonatomic,strong) NSMutableArray *tdoclist; //设置一个数组,存储tableview self.tdoclist=[NSMutableArray arrayWithCapacity

自定义监听状态栏点击

问题描述: 对于UIScrollView系统自带功能[点击状态栏返回顶部],但是这有局限性,当我们自己创建的UIScrollView过多时系统就会不知道返回哪一个的UIScrollView返回顶部,就会失效,所以这时就需要我们自己实现这个功能. 方法措施: 在状态栏覆盖一个window,我们创建一个UIWindow *topWindow;对象 摸索阶段: 我们将window的尺寸设置为状态栏的尺寸正好实现覆盖状态栏, topWindow.frame = application.statusBar

在自定义的tabbar 中间按钮 点击出现一个view 再点击view返回

入职第三天 遇到一个小问题 记下来 问题是自定义的tabbar 中间一个加号按钮 点击从下弹出一个view,再点击 view返回 首先再tabbar的view .h添加一个代理方法 在.m中 在tabbar的VC.m中实现代理方法( 我是在这里加了一个判断 反正实现了 菜鸟的做法吧,不加判断 点击回不去) 创建view的V和C 在V中 添加一个单例类 创建了view的坐标 在V.m中 创建好view的show 和dismiss 两个方法 这样大功告成了 中间还有一些细节 我也不知道怎么说 dis

关于导航自定义视图距离边界问题,点击状态栏TableView不能回滚到顶部问题

一: 默认Navigation的自定义customView,设置为 Left or Right BarButtonItem 的时候会 与屏幕边界有个15像素的距离. 导致自定义视图的上的子视图响应区域有限. 解决方法: //自定义视图 UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithCustomView:backButton]; //间距 UIBarButtonItem *negativeSpacer = [[UIBarBu

点击状态栏让tableview回到顶部最简单的方法

先看官方解释,如图: 官方说一个屏幕中只能允许一个scrollsTop = YES;不然就不能滚回顶部了!! 最简单的方法: 那么就让一个屏幕中只存在一个scrollsTop = YES就可以了, 其他的scrollsTop = NO;那么就可以默认点击状态栏tableview回到顶部! 完毕!!! ************************************************************************************************* 附

ios-自定义点击状态栏滚回顶部

点击状态栏滚回顶部这个功能是系统自带的,只需要设置self.scrollView.scrollsToTop = YES即可, 但是这个属性有一个前提是窗口下必须只有一个可滚动的View才有效果,这时候就需要自定义创建一个窗口 来完成这个功能. 添加窗口 在AppDelegate创建一个新的窗口必须给这个窗口设置一个根控制器,否则会报错,这里可以通过dispatch_after来给添加窗口一个延时就可以不设置根控制器 窗口是有级别的windowLevel,级别越高就越显示在顶部,如果级别一样,那么

iOS UITableView中点击状态栏无法回滚到顶部

// When the user taps the status bar, the scroll view beneath the touch which is closest to the status bar will be scrolled to top, but only if its `scrollsToTop` property is YES, its delegate does not return NO from `shouldScrollViewScrollToTop`, an

iOS开发——实战技术OC篇&amp;点击状态栏ScrollView(包括子控件)自动滚到顶部

点击状态栏ScrollView(包括子控件)自动滚到顶部 其实这种方式我们平时见的还是比较多的,而且适合用户的需求,所以就搬来琢磨了一下,感觉效果还不错 这里就直接将解决思路一一写出来不将代码分段展示了,在代码中我加了详细的注释objective-c的套路和swift基本一样,在最后会将Swift和objective-c的代码一起放上,如果需要直接解决问题的童鞋可以直接将代码拷贝到工程里即可 首先创建一个topWindow继承至NSObject,这里我们考虑将这个功能完全封装起来,所以所有的方法