前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS中tabBar按钮再次点击实现界面刷新(包含完整demo)【特色功能:在更新数据期间旋转tabbar的icon】

iOS中tabBar按钮再次点击实现界面刷新(包含完整demo)【特色功能:在更新数据期间旋转tabbar的icon】

作者头像
公众号iOS逆向
发布于 2021-03-08 03:06:17
发布于 2021-03-08 03:06:17
2.9K00
代码可运行
举报
文章被收录于专栏:iOS逆向与安全iOS逆向与安全
运行总次数:0
代码可运行

引言

  • video [video(video-zkepGWfX-1614648823294)(type-csdn)(url-https://live.csdn.net/v/embed/156107)(image-https://vedu.csdnimg.cn/93c3fb181b9c4df4af465e5fe10054f9/snapshots/4b797720423844aa94eb938dc07c6de3-00001.jpg)(title-iOS中tabBar按钮再次点击实现界面刷新)]

https://live.csdn.net/v/156107

  • 本文首发CSDN

https://kunnan.blog.csdn.net/article/details/77885824

  • 本文的demo 案例功能:

1、当进入首页时提示用户再次点击tabBar可刷新界面数据  2、刷新数据当同时旋转tabbar的图片

  • 从CSDN下载完整 demo :https://download.csdn.net/download/u011018979/15504711

1、文章地址:https://kunnan.blog.csdn.net/article/details/77885824  2、应用场景:适用于购物类app的首页tabBar,以及购物券类app的首页tabBar 3、特色功能:在更新数据期间旋转tabbar的icon

  • blink

https://blink.csdn.net/details/1175811

I、当进入首页时再次点击tabBar可刷新界面数据

1.1 在selectedViewController中记录上一次按钮的点击,用于数据刷新

  • 新增一个属性 记录上一次被点击按钮的tag
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** 记录上一次被点击按钮的tag */
@property (nonatomic, assign) NSInteger previousClickedTag;

1.2 实现 UITabBarControllerDelegate 进行数据刷新

  • 将selectedViewController设置为tabBarController的delegate
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    self.tabBarController.delegate = self;
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{

  • 记录上一次按钮的点击,进行数据刷新
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)viewDidLoad {
    [super viewDidLoad];
    self.automaticallyAdjustsScrollViewInsets = NO;

    self.view.backgroundColor = HWColor(245, 245, 245);
    [self setNavigationContent];
    
//    self.tabBarItem addObserver:<#(nonnull NSObject *)#> forKeyPath:<#(nonnull NSString *)#> options:<#(NSKeyValueObservingOptions)#> context:<#(nullable void *)#>
    self.tabBarController.delegate = self;
    
    
    self.previousClickedTag = 100;//默认没有点击任何tabbar
    
}

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
    
    
    if (tabBarController.selectedIndex == 0  && [self.tabBarItem.title isEqualToString:homeTabbarSelectedTitle]) {
        
        //进行数据刷新
        
        if ( self.previousClickedTag ==  tabBarController.selectedIndex ) {//进行了第二次点击
            
            [self.tableView.mj_header beginRefreshing];
        }
        
        
        
    }
    
    self.previousClickedTag = tabBarController.selectedIndex;//记录上一次按钮的点击
    
    
}

1.3 在UITabBarDelegate代理方法实现UITabBarItem样式的动态更换

  • 处理选中/未选中的UITabBarItem 样式

通过代理方法didSelectItem修改UITabBarItem的title ,达到选中之后和未选中的title不一样的效果

  • 切换到首页时title为刷新,提示用户再次点击tab刷新界面数据

在这里插入图片描述

  • 未选择首页tab时的title为首页

在这里插入图片描述

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NSString * const GYQhomeTabbarTitle = @"首页";
NSString * const GYQhomeTabbarSelectedTitle = @"刷新";

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
    
    
    if ([item.title isEqualToString:GYQhomeTabbarTitle]) {
        
        
        item.title = GYQhomeTabbarSelectedTitle;
        
        
        
    }else{
        
        
        // 切换到其他子Tab时,将首页tab的title刷新改为《首页》
        for (UITabBarItem *childView in tabBar.items) {
                if ([childView.title isEqualToString:GYQhomeTabbarSelectedTitle] &&  childView != item) {
                    
                    childView.title = GYQhomeTabbarTitle;
                    
                    
                }
           
            
        }
        
        
    }

//————————————————
//版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/z929118967/article/details/77885824
}

II、旋转tabbar 的图片


代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 是否刷新tabbar  的图片
 */
@property (nonatomic, assign) BOOL isreloadData;
/**
 存储UITabBarSwappableImageView,用于旋转tabbar的图片
 
 */
@property (nonatomic,strong)  UIView *imageView;



2.1 自定义UITabBar监听点击事件

  • 监听UITabBar的点击事件,并传递icon所在视图给外围来实现旋转动画
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 遍历tabBar上的子控件,给"UITabBarButton"类型的按钮绑定动画效果事件
//(注意:遍历添加动画事件的时机是在layoutSubviews布局子控件方法中)
- (void)layoutSubviews{
    [super layoutSubviews];
    
    for (UIControl *tabBarButton in self.subviews) {
        if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
            [tabBarButton addTarget:self action:@selector(tabBarButtonClick:) forControlEvents:UIControlEventTouchUpInside];
        }
    }
}

// 动画效果(遍历UITabBarButton按钮的子控件,
//如果需要对图片添加动画,寻找"UITabBarSwappableImageView"类型的图片子控件;
////如果需要对按钮下面的文字添加动画,寻找"UITabBarButtonLabel"类型的文字子控件即可).
- (void)tabBarButtonClick:(UIControl *)tabBarButton
{
    for (UIView *imageView in tabBarButton.subviews) {
        if ([imageView isKindOfClass:NSClassFromString(@"UITabBarSwappableImageView")]) {
            if (self.block) {
                self.block(imageView);
            }
            }}}

2.2 在更新数据期间旋转tabbar的icon

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

/**
 是否更换tabbar的图片
 */
@property (nonatomic, assign) BOOL isreloadData;

  • 旋转tabbar的图片
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS逆向 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • I、当进入首页时再次点击tabBar可刷新界面数据
    • 1.1 在selectedViewController中记录上一次按钮的点击,用于数据刷新
    • 1.2 实现 UITabBarControllerDelegate 进行数据刷新
    • 1.3 在UITabBarDelegate代理方法实现UITabBarItem样式的动态更换
  • II、旋转tabbar 的图片
    • 2.1 自定义UITabBar监听点击事件
    • 2.2 在更新数据期间旋转tabbar的icon
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档