1.监听按钮点击
2.判断是否是点击的同一个按钮(记录上次点击的按钮)
3.当重复点击相同按钮时,需要获取当前按钮对应控制器刷新界面
3.1 判断是否重复点击按钮,代码写在哪里?
点击标题按钮,属于精华控制器的事情,所以找到精华控制器.写在点击按钮方法里面
3.2怎么拿到按钮对应的控制器?
通过当前按钮的tag值,从精华控制器的子控制器数组中去
3.3怎么让对应的控制器刷新界面?
在对应的控制器里面提供刷新方法,这样每个控制器都要写,太麻烦
之前我们抽取了父类,只需要在父类中提供一个刷新界面方法即可,只需要写一次
3.4刷新界面用什么方法?
reloadData,这个方法不太好,没有下拉刷新的效果
之前我们在控制器中提供了下拉刷新的方法,调用下拉刷新方法即可
3.5下拉刷新用MJ框架集成的,怎么调用?
// 开始下拉刷新,触发下拉刷新,调用下拉刷新方法 [self.tableView.mj_header beginRefreshing];
3.6当控制器第一次被加载的时候,也需要刷新的效果,
我们在viewDidLoad里面手动调用下 下拉刷新就可以了
二.重复点击tabBar按钮加载数据
1.监听按钮点击
1.1系统的按钮怎么监听点击?
设置代理,自己成为自己的代理
当某些方法必须自己成为自己代理才能实现,那就自己成为自己的代理
1.2怎么监听?
1 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
2.判断是否点击了同一个TabBar按钮(记录上次点击的按钮(控制器))
2.1定义属性记录上次选中按钮(控制器)
2.2让第0个按钮(控制器)成为选中按钮(默认会选中第0个按钮)
3.获取当前界面显示的控制器,刷新界面
3.1 tabBarController不能直接获取主题控制器,怎么办?
3.2 采用通知,重复点击tabBar上按钮发出通知,所有主题控制器接收通知
3.3 在精华和新帖的父控制器(主题控制器)接收通知
点击子类时,self指向子类,也就是子类接收通知
3.4 当所有的子类控制器都被点击时,在点击TabBar按钮,所有的子控制器都接收通知,都会刷新
3.5 怎么做到,只让一个控制器刷新界面?
接收通知的主题控制器,只有显示在屏幕(界面)上的控制器才需要刷新
3.6 如何判断控制器是否显示在屏幕(界面)上
通过window属性,如果控制器的view有window属性,表示当前控制器在窗口上显示,没有就没显示。
1 // 在屏幕上控制器的view才需要刷新界面 2 if (self.view.window) { 3 // 开始下拉刷新,触发下拉刷新,调用下拉刷新方法 4 [self.tableView.mj_header beginRefreshing]; 5 }
三.点击状态栏回到顶部
1.UIScrollView有个特性,点击状态栏,会自动回到顶部
2.为什么会有这个特性?
因为 scrollsToTop这个属性, 苹果对这个属性有介绍 (默认为YES)
介绍:在当前显示的所有view中,如果多个scrollView的 scrollsToTop属性都打开,就没有效果了
整个屏幕上只能一个scrollView打开scrollsToTop,才有用
3.怎么让我们的主题控制器也拥有: 点击状态栏,自动回到顶部?
只让主题控制器的scrollsToTop = YES 即可
在精华和新帖的父控制器中,设置collectionView 和 scrollView(标题按钮栏) 的scrollsToTop属性为NO