iOS开发——实用技术OC片&点击状态栏回到顶部

点击状态栏回到顶部

经常我们在使用一个App的时候,比如QQ,微信等流行App都会有一个很常见的功能,就是当我们刷新了很多节目的时候,先立刻回到顶部只需要轻轻点一下状态栏就可以(当然这种方法不是谁都知道的,因为app没有提示),也有的会在屏幕的右下角或者某个位置放置一个按钮实现点击按钮一样可以回到顶部,那样实现虽然可以,也不是很麻烦,但是其实系统已经为我们提供了一个很好的自带的功能,我们为什么不用呢?

但是最近在自己视线这个功能的时候遇到了一个小小的问题,那就拿出来分享一下,当然前面也有说到类似的问题:http://www.cnblogs.com/iCocos/p/4733430.html

@property(nonatomic) BOOL  scrollsToTop 这个属性在起作用 默认是YES

  • // 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`, and it is not already at the top.
  • // On iPhone, we execute this gesture only if there‘s one on-screen scroll view with `scrollsToTop` == YES. If more than one is found, none will be scrolled.

只有当一个主控制器有一个scrollview 并把这个属性设置为yes,其他的scrollview.scrollsToTop = NO 这样才会响应这个事件,原理很简单,如果有2个scrollview,系统根本不知道你需要哪个滚动到最上面 切记!

比如说:有时候我们会在一个UIView里面放多个UITableView或者ScrollView。

如 果我们在IB里面加入这些UITableView,通常我们也会把delegate和datasource也关联到同一个ViewController 里面。这就是问题所在了。把UITableView里面的scrollToTop方法设为YES(默认是YES)就能使得该UITableView在点击 顶部状态栏的时候把table滚到顶部。但是多个table同时关联到controller的时候,这个方法就失效了。

解决的方法很简单,不要让这些UITableView同时visible,一个时间内只让其中一个visible就行了。可以设置

  • talbeView1.scrollsToTop = NO;
  • tableView2.scrollerToTop = YES;

或者

  • talbeView1.hidden = NO;
  • tableView2.hidden = YES;

------------------或者你还可以这样实现--------------------

在一个scrollview中横向有多个tableview,点击状态栏,tableview要返回到顶部

要将所有scrollview 以及tableview 的scrollToTop设置为NO。显示的tableview的scrollToTop设置为TRUE。

@property(nonatomic,strong) NSMutableArray *tdoclist;

//设置一个数组,存储tableview

 1 self.tdoclist=[NSMutableArray arrayWithCapacity:10];
 2
 3     for (int i=0; i<[self.category count]+1; i++) {
 4
 5         [[[CommenData alloc]init] setCategoryIndex:[self getCategoryIndex:i]];
 6
 7         if (i==0) {
 8
 9             self.doctable=[self.storyboard instantiateViewControllerWithIdentifier:@"docview"];
10
11             self.doctable.view.frame=CGRectMake(r.size.width*i, 0.0, r.size.width, r.size.height-40);
12
13             [self addChildViewController:self.doctable];
14
15             self.doctable.tableView.scrollsToTop=YES;
16
17             [self.tdoclist addObject:self.doctable];
18
19             [self.tableScroll addSubview:self.doctable.view];
20
21         }else{
22
23             self.tdoctable=[self.storyboard instantiateViewControllerWithIdentifier:@"tdocview"];
24
25             self.tdoctable.view.frame=CGRectMake(r.size.width*i, 0.0, r.size.width, r.size.height-40);
26
27             [self addChildViewController:self.tdoctable];
28
29             self.tdoctable.tableView.scrollsToTop=NO;
30
31             [self.tdoclist addObject:self.tdoctable];
32
33             [self.tableScroll addSubview:self.tdoctable.view];
34
35         }
36
37     }

//左右滑动页面切换tableview时切换 tableview的scrollToTop属性

 1 -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
 2
 3     //加载之后的一页
 4
 5     if (scrollView==self.tableScroll) {
 6
 7                 CGFloat pageWidth=scrollView.frame.size.width;
 8
 9         int page=floor((scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1;
10
11         if (page!=indexPage) {
12
13             //可以继续滚动
14
15             if (indexPage<[self.category count]+1) {
16
17                 indexPage=page;
18
19                 [self.scrollnavi setSelectedIndex:indexPage];
20
21                 for (int i=0; i<self.tdoclist.count; i++) {
22
23                     TDocTableViewController *tdocs = self.tdoclist[i] ;
24
25                     if (i==indexPage) {
26
27                         tdocs.tableView.scrollsToTop=YES;
28
29                     }else{
30
31                         tdocs.tableView.scrollsToTop=NO;
32
33                     }
34
35                 }
36
37                 //若直接用self.tdoc 只会刷新最后一个页面
38
39                  TDocTableViewController *tdoc = self.tdoclist[indexPage] ;
40
41                 [tdoc refreshData];
42
43             }
44
45         }
46
47     }
48
49 }
时间: 2024-05-07 00:10:34

iOS开发——实用技术OC片&点击状态栏回到顶部的相关文章

重复点击主界面(TabBar)按钮刷新界面--点击状态栏回到顶部

1.监听按钮点击 2.判断是否是点击的同一个按钮(记录上次点击的按钮) 3.当重复点击相同按钮时,需要获取当前按钮对应控制器刷新界面 3.1 判断是否重复点击按钮,代码写在哪里? 点击标题按钮,属于精华控制器的事情,所以找到精华控制器.写在点击按钮方法里面 3.2怎么拿到按钮对应的控制器? 通过当前按钮的tag值,从精华控制器的子控制器数组中去 3.3怎么让对应的控制器刷新界面? 在对应的控制器里面提供刷新方法,这样每个控制器都要写,太麻烦 之前我们抽取了父类,只需要在父类中提供一个刷新界面方法

ios开发——实用技术OC-Swift篇&amp;触摸与手势识别

iOS开发学习之触摸事件和手势识别 iOS的输入事件 触摸事件 手势识别 手机摇晃 一.iOS的输入事件 触摸事件(滑动.点击) 运动事件(摇一摇.手机倾斜.行走),不需要人为参与的 远程控制事件(耳机控制手机声音) 1??iOS事件对象都是UIEvent类的实例 UIEvent类对事件类型定义了enum常量: typedef NS_ENUM(NSInteger, UIEventType){ UIEventTypeTouches, UIEventTypeMotion, UIEventRemote

iOS开发——实用技术OC篇&amp;单例模式的实实现(ACR&amp;MRC)

单例模式的实实现(ACR&MRC) 在iOS开发中单例模式是一种非常常见的模式,虽然我们自己实现的比较少,但是,系统却提供了不少的到来模式给我们用,比如最常见的UIApplication,Notification等, 那么这篇文章就简单介绍一下,我们开发中如果想要实现单例模式要怎么去实现! 单例模式顾名思义就是只有一个实例,它确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例.它经常用来做应用程序级别的共享资源控制.这个模式使用频率非常高,通过一个单例类,可以实现在不同窗口之间传递数

iOS开发——实用技术OC篇&amp;多线程整合

多线程整合 本文知识对iOS开发中多线程的一些知识整合,关于一些概念和技术问题并没有过多的介绍,如果你想了解更多请查看笔者之前写的iOS开发之多线程详解(比较完整):但是有部分涉及到之前文章中没有的技术点和常识,比如加锁的方式,面试相关的,还有一些关于GCD的高级用法,希望你能认真看完,或许可以收获到很多! http://www.cnblogs.com/iCocos/p/4553103.html http://www.cnblogs.com/iCocos/p/4553262.html ??先来看

iOS 点击状态栏回到顶部

@property(nonatomic) BOOL scrollsToTop; // default is YES. UIScrollView 的scrollsToTop默认为YES,当页面里仅一个UIScrollView的时候 ,不需要做任何操作,点击状态栏就可以回到顶部 当页面上有多个UIScrollView时,此时点击状态栏 不会回到顶部 只需要把需要回到顶部的UIScrollView的scrollsToTop设置为YES,其余的设置为scrollsToTop=NO即可

点击状态栏回到顶部

// 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;UIWebView与JS的交互

UIWebView与JS的交互 事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的HTML.除此之外,还需要禁用获取的HTML文本中自带的 < img > 标签自动加载,并把下载图片的操作放在native端来处理,并通过JS将图片在Cache中的地址返回给UIWebv

ios开发——实用技术OC-Swift篇&amp;本地通知与远程通知详解

本地通知与远程通知详解 一:本地通知 Local Notification的作用 Local Notification(本地通知) :是根据本机状态做出的通知行为,因此,凡是仅需依赖本机状态即可判断需要发出通知的行为都可以或者说应该使用Local Notification来处理.比方说:iBeacon中进入了某个Beacon region,或者说自定义的一些定时提醒等. 构建Local Notification 在iOS中,构建LocalNotification非常简单,只需要掌握好NSLoca

iOS开发——实用技术OC篇&amp;事件处理详解

事件处理详解 一:事件处理 事件处理常见属性: 事件类型 @property(nonatomic,readonly) UIEventType     type; @property(nonatomic,readonly) UIEventSubtype  subtype; 事件产生的时间 @property(nonatomic,readonly) NSTimeInterval  timestamp; 事件传递 - hitTest:withEvent: SWIFT func hitTest(_ po