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

重复点击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)按钮刷新界面--点击状态栏回到顶部)