重复点击主界面(TabBar)按钮刷新界面

重复点击主界面(TabBar)按钮刷新界面_第1张图片
....

一.重复点击主题界面按钮加载数据

1.监听按钮点击

2.判断是否是点击的同一个按钮(记录上次点击的按钮)

3.当重复点击相同按钮时,需要获取当前按钮对应控制器刷新界面

3.1 判断是否重复点击按钮,代码写在哪里?
点击标题按钮,属于精华控制器的事情,所以找到精华控制器.写在点击按钮方法里面

3.2怎么拿到按钮对应的控制器?
通过当前按钮的tag值,从精华控制器的子控制器数组中去

3.3怎么让对应的控制器刷新界面?
在对应的控制器里面提供刷新方法,这样每个控制器都要写,太麻烦
之前我们抽取了父类,只需要在父类中提供一个刷新界面方法即可,只需要写一次

3.4刷新界面用什么方法?
reloadData,这个方法不太好,没有下拉刷新的效果
之前我们在控制器中提供了下拉刷新的方法,调用下拉刷新方法即可

3.5下拉刷新用MJ框架集成的,怎么调用?

 // 开始下拉刷新,触发下拉刷新,调用下拉刷新方法
  [self.tableView.mj_header beginRefreshing];

二.重复点击tabBar按钮加载数据

1.监听按钮点击

1.1系统的按钮怎么监听点击?
设置代理,自己成为自己的代理
当某些方法必须自己成为自己代理才能实现,那就自己成为自己的代理

1.2怎么监听?

 - (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属性,表示当前控制器在窗口上显示,没有就没显示。

   // 在屏幕上控制器的view才需要刷新界面
if (self.view.window) {
    // 开始下拉刷新,触发下拉刷新,调用下拉刷新方法              
[self.tableView.mj_header beginRefreshing];
}

三.点击状态栏回到顶部

1.UIScrollView有个特性,点击状态栏,会自动回到顶部

2.为什么会有这个特性?

因为 scrollsToTop这个属性, 苹果对这个属性有介绍 (默认为YES)
介绍:在当前显示的所有view中,如果多个scrollView的 scrollsToTop属性都打开,就没有效果了
整个屏幕上只能一个scrollView打开scrollsToTop,才有用

3.怎么让我们的主题控制器也拥有: 点击状态栏,自动回到顶部?

只让主题控制器的scrollsToTop = YES 即可
在精华和新帖的父控制器中,设置collectionView 和 scrollView(标题按钮栏) 的scrollsToTop属性为NO

你可能感兴趣的:(重复点击主界面(TabBar)按钮刷新界面)