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

Posted loveDoDream_zzt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点击状态栏让tableview回到顶部最简单的方法相关的知识,希望对你有一定的参考价值。

 

先看官方解释,如图:

官方说一个屏幕中只能允许一个scrollsTop = YES;不然就不能滚回顶部了!!

 

最简单的方法:

那么就让一个屏幕中只存在一个scrollsTop = YES就可以了, 其他的scrollsTop = NO;那么就可以默认点击状态栏tableview回到顶部!

完毕!!!

*************************************************************************************************

附加一个不简单的方法:

1. #import "AppDelegate.m"文件中导入头文件#import "ZTStatusWindow.h" (后附代码)

2. 添加[ZTStatusWindow show]; (:在显示主窗口的代码[self.window makeKeyAndVisible],添加[ZTStatusWindow show])

3.  显示状态栏:application.statusBarHidden = NO;([ZTStatusWindow show]方法后添加)

4.  info.plist中在添加一个键值"View controller-based status bar appearance",即选择最后一个即可,相应的选为NO.如图:

 

 只要app有两个窗口,状态栏会自动隐藏, ios7之后,状态栏交给控制器管理

 这里有窗口根控制器和自定义的控制器,所以会隐藏状态栏(即自定义的窗口), 要把iOS7之后的配置改回来

 

注:ZTStatusWindow.h和ZTStatusWindow.m的代码

 

1. ZTStatusWindow.h

1 #import <UIKit/UIKit.h>
2 
3 @interface ZTStatusWindow : UIWindow
4 
5 + (void)show;
6 
7 @end

 

2. ZTStatusWindow.m

 1 #import "ZTStatusWindow.h"
 2 static ZTStatusWindow *_statusWindow = nil;
 3 @implementation ZTStatusWindow
 4 
 5 #define ZTScreenW [UIScreen mainScreen].bounds.size.width
 6 #define ZTScreenH [UIScreen mainScreen].bounds.size.height
 7 
 8 + (void)show
 9 {
10     ZTStatusWindow *statusWindow = [[ZTStatusWindow alloc] initWithFrame:CGRectMake(0, 0, ZTScreenW, 20)];
11     statusWindow.windowLevel = UIWindowLevelAlert;
12     statusWindow.rootViewController = [[UIViewController alloc] init];
13     statusWindow.backgroundColor = [UIColor clearColor];
14     
15     //lei
16     _statusWindow = statusWindow;
17     statusWindow.hidden = NO;
18 }
19 
20 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
21 {
22     // 获取tableView 遍历主窗口下所有子控件
23     UIWindow *window = [UIApplication sharedApplication].keyWindow;
24 
25 
26     // 获取一个控件中tableView
27     UITableView *tableView = [self searchTableViewInView:window];
28     
29 //    NSLog(@"%@",tableView);
30     
31     // 让tableView回到顶部 => 设置tableView偏移量
32     [tableView setContentOffset:CGPointMake(0, -tableView.contentInset.top) animated:YES];
33     
34     NSLog(@"点击状态栏");
35 }
36 
37 
38 - (UITableView *)searchTableViewInView:(UIView *)view
39 {
40     for (UIView *childView in view.subviews) {
41         
42         if ([childView isKindOfClass:[UITableView class]]) {
43             UITableView *t = (UITableView *)childView;
44             return t;
45         }
46         //如果子控件不是UITableView,那么接着遍历他的子控件看是不是,是的话因为返回值是UITableView *,那么tableview就有值,不然就没值
47        UITableView *tableView = [self searchTableViewInView:childView];
48         
49         //判断那么tableview有没有值
50         if (tableView) {
51             return tableView;
52         }
53         
54     }
55     
56     return nil;
57 
58 }
59 
60 @end

应该没有人用第二种方法吧, 只是为了方便学习。

以上是关于点击状态栏让tableview回到顶部最简单的方法的主要内容,如果未能解决你的问题,请参考以下文章

Vue点击按钮回到顶部

iOS开发 点击cell后刷新tableview后回到tableView顶部了,怎么让他的位置不动啊,留在原来cell的位置

android如何实现类似ios点击状态栏回到顶部功能

android如何实现类似ios点击状态栏回到顶部功能

iOS tableView 滚动后回到顶部

iOS解决UITableView的contentOffset捕获不准确的问题