工作中经常会遇到给UITabbarController上的TabBar 加数字提醒,下面说说怎么实现的。
首先是添加带数字的badge。
例如有四个controller 作为UItabBarController 的Controllers,那么可以使用下面的这个句子。
[[[[[self tabBarController] tabBar] items] objectAtIndex:1] setBadgeValue:[NSString stringWithFormat:@"%zd", [ChatbadgecountManager totalBadgeValue]]];
- 1
这个是设置第二个viewController 的tabbar item上的badge。
(1)将这个代码写在公共的tabBarController 设置完controllers后,结果没效果。
(2)如果将这个代码写在第二个controller的viewDidLoad 中,结果并没有实现想要的红点数字。
(3)如果加在第二个viewDidLoad中的话那么只有在点击第二个tab的时候(即viewDidAppear时)才会出现。加在第二个viewController的initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
方法中则是完全没有效果,不管这个代码有没有被调用。
(4)加在第一个viewController的initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
也是同样没有效果,但是加在它的viewDidLoad中的话却是可以设置其他viewController中的红点数字。
(5)将这个句子写在第一个viewController的viewDidLoad中,就可以在启动的时候直接设置第二个viewController的红点数字提醒了。神奇。
最后是添加红点数字。
以下的是借鉴另一篇csdn的博客的,找不到链接了,也表示感谢原作者。
新建一个UITabBar的category 分类(littleRedDotBadge),然后实现`- (void)showBadgeOnItemIndex:(int)index,
- (void)hideBadgeOnItemIndex:(int)index
#import "UITabBar+littleRedDotBadge.h"
#define TabbarItemNums 4.0 //tabbar的数量
@implementation UITabBar (littleRedDotBadge)
- (void)showBadgeOnItemIndex:(int)index{
//移除之前的小红点
[self removeBadgeOnItemIndex:index];
//新建小红点
UIView *badgeView = [[UIView alloc]init];
badgeView.tag = 888 + index;
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, 8, 8);
badgeView.layer.cornerRadius = badgeView.frame.size.width/2;
[self addSubview:badgeView];
}
- (void)hideBadgeOnItemIndex:(int)index{
//移除小红点
[self removeBadgeOnItemIndex:index];
}
- (void)removeBadgeOnItemIndex:(int)index{
//按照tag值进行移除
for (UIView *subView in self.subviews) {
if (subView.tag == 888+index) {
[subView removeFromSuperview];
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
最后在第一个ViewController中就可以import 使用了,可以用notification的形式进行添加和移除这个红点。
[[NSNotificationCenter defaultCenter] addObserverForName:ReadAllNoticeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
[self.tabBarController.tabBar hideBadgeOnItemIndex:3];
}];
[[NSNotificationCenter defaultCenter] addObserverForName:HaveNewNoticeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
[self.tabBarController.tabBar showBadgeOnItemIndex:3];
}];