点击已选中的UITabBarItem进行刷新效果

现在很多的App都有点击UITabBarItem刷新页面的功能,例如网易云音乐,知乎,简书,微博......(也可以自定义tabbar实现双击刷新)

实现分三步

1.记录上次选中的tabBarItem,用于下次点击时判断是选择新控制器还是刷新

1.1 设置属性用以记录

@property (nonatomic, strong) UITabBarItem *lastItem;

1.2 viewWillAppear中赋值

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    // 将默认被选中的tabBarItem保存为属性
    self.lastItem = self.tabBar.selectedItem;
}

1.3 遵循UITabBarControllerDelegate,保存选中的item,如果这次点击的和上次的一样就发出通知让一些页面刷新

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
    // 判断本次点击的UITabBarItem是否和上次的一样
    if (item == self.lastItem) { // 一样就发出通知
        SendNotify(TABBARDIDCLICK_NOTIFICATION, nil)
    }
    // 将这次点击的UITabBarItem赋值给属性
    self.lastItem = item;
}

2. 控制器里监听通知进行刷新,但在刷新前需要判断该页面是否正在显示,不然注册通知的界面都会刷新

RegisterNotify(TABBARDIDCLICK_NOTIFICATION, @selector(tabBarDidClick))

- (void)tabBarDidClick
{
    // 如果本控制器的view显示在最前面,就下拉刷新
    if ([self.view isShowingOnKeyWindow]) { // 判断一个view是否显示在根窗口上,该方法在UIView的分类中实现
        [self.scrollView.mj_header beginRefreshing]; // MJRefresh
    }
}

- (void)dealloc{
    RemoveNofifys(TABBARDIDCLICK_NOTIFICATION, nil)
}

2.1判断当前view是否正在显示,为UIView添加一个分类方法

- (BOOL)isShowingOnKeyWindow
{
    // 主窗口
    UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
    
    // 以主窗口左上角为坐标原点, 计算self的矩形框
    CGRect newFrame = [keyWindow convertRect:self.frame fromView:self.superview];
    CGRect winBounds = keyWindow.bounds;
    
    // 主窗口的bounds 和 self的矩形框 是否有重叠
    BOOL intersects = CGRectIntersectsRect(newFrame, winBounds);
    
    return !self.isHidden && self.alpha > 0.01 && self.window == keyWindow && intersects;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,140评论 3 119
  • 凤梨罐头会过期,化妆品会过期,太久没有聊过天好像默契都会过期,我也开始思考这个世界上还有什么东西是不会过期的? 二...
    不美丽故事主人阅读 141评论 0 0
  • 快速阅读的第一步,就是认清自己的现状,之后才是一些具体的方法。对于快速阅读,我们先要改变一些自己固有的、错误的观点...
    哈帝阅读 2,278评论 0 0
  • name. name. of. love❤
    Anmoyouyou阅读 300评论 0 4
  • 草在结它的种子,风在摇它的叶子,我们站着,不说话,就十分美好。——顾城 连着下了几天的雨,今天是一个很明亮的阴天,...
    陈晨儿阅读 251评论 0 3

友情链接更多精彩内容