一、最近总结自己写的项目,消息数提醒除了系统的UITabBarItem的badgeValue,其他地方想要用到就必须自定义,而自定义必须至少三个步骤
- 创建实例对象(或者使用类方法)
- 设置相关属性值
- 添加到指定位置
二、我希望只需要一句代码就能实现,就好像系统提供的badgeValue,我只需要设置个值,就能显示出来,而且我需要在任意的视图上都能显示!不需要管内部怎么实现,这样使用起来就十分爽,先上图吧:
三、那么怎么实现了,相信大家都能想到了,对,就是UIView分类,利用runtime添加属性,就是这么简单、方便、粗暴!
四、API设计,就一个属性,因为考虑到是分类,不方便管理,默认消息红点就是在右上角
/*
* author 孔凡列
*
* gitHub https://github.com/gitkong
* cocoaChina http://code.cocoachina.com/user/
* 简书 http://www.jianshu.com/users/fe5700cfb223/latest_articles
* QQ 279761135
* 喜欢就给个like 和 star 喔~
*/
#import <UIKit/UIKit.h>
@interface UIView (BadgeValue)
/**
* @author Clarence
*
* 设置消息数,设置小于或等于0 、@"" 、nil 就隐藏
*/
@property (nonatomic,copy)NSString *fl_badgeValue;
@end
总结
用法极其简单,用点语法即可,Demo里面有
分类不方便管理,因此暂时只提供一个默认的,红点位置在控件的右上角
隐藏badgeValue 只需要设置其字符串的值是小于或等于0、空字符串、nil都可以
设置断言,默认输入的字符串值都是数字,不能是其他,不需要这功能可以在m文件中注释掉断言
注意:如果是在cell中的控件添加BadgeValue红点,需要在赋值前,保证cell的控件已经布局,可以调用
[cell layoutIfNeeded]
强制布局 (2016.11.29更新)相信大家看上面的gif都发现了,UITextField不能正常显示红点,其实就是一个textField属性设置问题,因为我是用SB创建的,默认clip to bounds 是YES,取消就行啦,如下图: