在做聊天时,其它界面的消息按钮展示,会遇到显示未读消息条数的情况.
今天整理下,处理消息角标设置方法.
直接上代码.
创建一个类 BageButton继承UIButton类,并拓展这个按钮的属性.
.h文件:
//设置角标数字font
#define SCBadgeNumberFontSize [UIFont systemFontOfSize:8]
@interface JKBadgeView : UIButton
/**
* badgeView上显示的数字
*/
@property (nonatomic, copy) NSString *badgeValue;
@end
.m文件:
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
// 不允许点击
self.userInteractionEnabled = NO;
// 设置字体
self.titleLabel.font = SCBadgeNumberFontSize;
// 设置居右
self.titleLabel.textAlignment = NSTextAlignmentRight;
// 字体颜色
[self setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
}
return self;
}
- (void)setBadgeValue:(NSString *)badgeValue
{
// 设置属性
_badgeValue = badgeValue;
// 设置badgeView内容
[self setBadgeViewWithbadgeValue:badgeValue];
}
- (void)setBadgeViewWithbadgeValue:(NSString *)badgeValue {
// 设置文字内容
[self setTitle:badgeValue forState:UIControlStateNormal];
// 判断是否有内容,设置隐藏属性
if (badgeValue.length == 0 ||
[badgeValue isEqualToString:@"0"]||[JK_Helper isStringEmpty:badgeValue]) {
// 数值内容为空或数值为0,则隐藏
self.hidden = YES;
}
else {
self.hidden = NO;
}
long badgeNumber = [badgeValue longLongValue];
// 如果文字尺寸大于控件宽度
if (badgeNumber > 9 && badgeNumber < 100) {
// 显示中等大小图片
[self setBackgroundImage:[UIImage imageNamed:@""]
forState:UIControlStateNormal];
}
else if (badgeNumber > 99) {
// 设置文字内容
[self setTitle:@"99+" forState:UIControlStateNormal];
// 显示内容和大红点背景
[self setBackgroundImage:[UIImage imageNamed:@""]
forState:UIControlStateNormal];
} else {
// 设置图片
//badge_cart_icon3
[self setBackgroundImage:[UIImage imageNamed:@""]
forState:UIControlStateNormal];
}
// 尺寸自适应
[self sizeToFit];
}
@end
在需要使用角标按钮的地方,直接用BageButton 来创建这个按钮就ok了.