美文网首页
重复点击TabBar按钮刷新当前页面

重复点击TabBar按钮刷新当前页面

作者: Zaki丶 | 来源:发表于2016-11-19 22:20 被阅读416次

    前言

    今天,项目上遇到了一个需求,是类似于头条点击TabBar刷新当前页面的.做了一下午终于搞定, 在这里给大家说一下我的实现思路,顺带附上项目代码,供各位小伙伴参考

    实现思路

    • 自定义TabBar,遍历TabBar中的子控件,给TabBar添加点击事件
    • 在点击事件中判断TabBar是不是重复点击
    • 如果是的话,对外发出通知
    • 在对应需要实现刷新的TabBar控制器中接收通知
    • 添加事件,进行刷新操作

    代码实现

    首先,我们需要先在TabBarController.m中,将自定义的TabBar与系统TabBar进行替换

    - (void)setTabBarButton
    {
        ZQTabBar *tabBar = [[ZQTabBar alloc]init];
        
        [self setValue:tabBar forKey:@"tabBar"];
    }
    

    然后进入自定义TabBar中,遍历TabBar按钮,添加点击事件,判断是否与上次点击按钮的属性相等,如果相等的话就发出通知

    interface ZQTabBar ()
    
    /**   上次点按属性  */
    @property (nonatomic ,weak)UIControl *previousClickTabBarButton;
    
    @end
    
    @implementation ZQTabBar
    
    - (void)layoutSubviews
    {
        //初始化
        [super layoutSubviews];
        
            //遍历TabBar中的子控件
        for (UIControl *tabBarBtn in self.subviews) {
        
             //判断是否为TabBar按钮 ,不是就跳过
            if (![tabBarBtn isKindOfClass:NSClassFromString(@"UITabBarButton")])  continue;
    
            //是否是第一次进入,如果是第一次进入,就将第一个按钮赋值
            if (i == 0 && self.previousClickTabBarButton == nil) {
                self.previousClickTabBarButton = tabBarBtn;
            }
            
            //点击实现方法
            [tabBarBtn addTarget:self action:@selector(TabBarBtnClick:) forControlEvents:UIControlEventTouchUpInside];
        }
    }
    
    - (void)TabBarBtnClick:(UIControl *)tabBarBtn
    {
          //判断 是否与上次点击按钮的属性 相等  相等就发出通知
        if (self.previousClickTabBarButton == tabBarBtn) {
            //发出通知
            [[NSNotificationCenter defaultCenter] postNotificationName:@"ZQTabBarButtonDidRepeatClickNotification" object:nil];
        }
        
        //赋值给属性
        self.previousClickTabBarButton = tabBarBtn;
    }
    

    在你需要重复点击TabBar进行刷新的界面中,接收通知

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tabBarButtonDidRepeatClick) name:ZQTabBarButtonDidRepeatClickNotification object:nil];
    }
    

    在接收通知事件中,判断是否为当前页面与当前窗口,如果是那就执行刷新

    - (void)tabBarButtonDidRepeatClick
    {
        //判断是否为当前界面
        if (self.tableView.scrollsToTop == NO) return;
        
        //判断是否为当前窗口
        if (self.tableView.window == nil) return;
        
        //刷新事件
        [self HeaderBeginRefreshing];
    }
    

    相关文章

      网友评论

          本文标题:重复点击TabBar按钮刷新当前页面

          本文链接:https://www.haomeiwen.com/subject/xzuepttx.html