美文网首页
重复点击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