码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-11-25 07:33:58      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:ios   fse   isp   poi   tab   nil   appear   content   share   

 

先看官方解释,如图:

技术分享

官方说一个屏幕中只能允许一个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回到顶部最简单的方法

标签:ios   fse   isp   poi   tab   nil   appear   content   share   

原文地址:http://www.cnblogs.com/loveDodream-zzt/p/6100234.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!