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

前言

今天,项目上遇到了一个需求,是类似于头条点击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];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 178,246评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,750评论 4 61
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,437评论 19 139
  • 每一个程序入口的mian函数就有一个RunLoop。UIApplicationMain函数内部启动的一个RunLo...
    JaXz阅读 332评论 0 1
  • 琼恩决意离开长城,忧郁的艾迪这次真的忧郁了。 就在艾迪无语的时候,那句久违的台词来了:Open the gate!...
    踏雪有痕阅读 1,678评论 1 1

友情链接更多精彩内容