http://blog.csdn.net/lilinoscar/article/details/47103747
项目需求,希望当用户存在未读消息的时候在对应的UITabBarItem上显示小红点。发现IOS自带的UITabBarItem的badgeValue尺寸偏大,不满足项目需求。
第一步,建一个UITabBar的category类别。
第二步,编写代码。
.h文件
- #import <UIKit/UIKit.h>
-
- @interface UITabBar (badge)
-
- - (void)showBadgeOnItemIndex:(int)index;
-
- - (void)hideBadgeOnItemIndex:(int)index;
-
- @end
.m文件
- #import "UITabBar+badge.h"
- #define TabbarItemNums 4.0 //tabbar的数量 如果是5个设置为5.0
-
- @implementation UITabBar (badge)
-
- - (void)showBadgeOnItemIndex:(int)index{
-
- [self removeBadgeOnItemIndex:index];
-
-
- UIView *badgeView = [[UIView alloc]init];
- badgeView.tag = 888 + index;
- badgeView.layer.cornerRadius = 5;
- badgeView.backgroundColor = [UIColor redColor];
- CGRect tabFrame = self.frame;
-
-
- float percentX = (index +0.6) / TabbarItemNums;
- CGFloat x = ceilf(percentX * tabFrame.size.width);
- CGFloat y = ceilf(0.1 * tabFrame.size.height);
- badgeView.frame = CGRectMake(x, y, 10, 10);
- [self addSubview:badgeView];
- }
-
- - (void)hideBadgeOnItemIndex:(int)index{
-
- [self removeBadgeOnItemIndex:index];
- }
-
- - (void)removeBadgeOnItemIndex:(int)index{
-
- for (UIView *subView in self.subviews) {
- if (subView.tag == 888+index) {
- [subView removeFromSuperview];
- }
- }
- }
-
- @end
第三步,引入到需要使用的类中。
- #import "UITabBar+badge.h"
引用代码如下:
-
- [self.tabBarController.tabBar showBadgeOnItemIndex:2];
-
- [self.tabBarController.tabBar hideBadgeOnItemIndex:2]
大功告成,接下来看看效果。