From 63dbb25fddcdc76917a6b627e623fbc1cd647102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9B=A6?= <420194918@qq.com> Date: Tue, 25 Jan 2022 16:55:09 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=99=20QMUIBadgeProtocol=20=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E4=BA=86qmui=5FbadgeAttributedString=20=E5=8F=82?= =?UTF-8?q?=E6=95=B0.=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8=E8=BF=99?= =?UTF-8?q?=E4=B8=AA=E5=8F=82=E6=95=B0.=E7=BB=99badge=20=E9=99=84=E5=8A=A0?= =?UTF-8?q?=E6=9B=B4=E5=A4=9A=E6=A0=B7=E5=BC=8F,=E6=AF=94=E5=A6=82?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=88=96=E5=9B=BE=E7=89=87=E6=96=87=E5=AD=97?= =?UTF-8?q?=E7=9A=84=E7=BB=84=E5=90=88=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QMUIBadge/QMUIBadgeProtocol.h | 3 ++ .../QMUIBadge/UIBarItem+QMUIBadge.m | 13 +++++++ .../QMUIBadge/UIView+QMUIBadge.m | 37 ++++++++++++++++++- 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/QMUIKit/QMUIComponents/QMUIBadge/QMUIBadgeProtocol.h b/QMUIKit/QMUIComponents/QMUIBadge/QMUIBadgeProtocol.h index 62b05e53..e2bbe126 100644 --- a/QMUIKit/QMUIComponents/QMUIBadge/QMUIBadgeProtocol.h +++ b/QMUIKit/QMUIComponents/QMUIBadge/QMUIBadgeProtocol.h @@ -32,6 +32,9 @@ NS_ASSUME_NONNULL_BEGIN /// 用字符串设置未读数,nil 表示不显示未读数 @property(nonatomic, copy, nullable) NSString *qmui_badgeString; +/// 用富文本设置角标.扩展自定义的图片或组合样式 +@property(nonatomic, copy, nullable) NSAttributedString *qmui_badgeAttributedString; + @property(nonatomic, strong, nullable) UIColor *qmui_badgeBackgroundColor; @property(nonatomic, strong, nullable) UIColor *qmui_badgeTextColor; diff --git a/QMUIKit/QMUIComponents/QMUIBadge/UIBarItem+QMUIBadge.m b/QMUIKit/QMUIComponents/QMUIBadge/UIBarItem+QMUIBadge.m index 62aabfcc..401f571d 100644 --- a/QMUIKit/QMUIComponents/QMUIBadge/UIBarItem+QMUIBadge.m +++ b/QMUIKit/QMUIComponents/QMUIBadge/UIBarItem+QMUIBadge.m @@ -100,6 +100,19 @@ - (NSString *)qmui_badgeString { return (NSString *)objc_getAssociatedObject(self, &kAssociatedObjectKey_badgeString); } +static char kAssociatedObjectKey_badgeAttributedString; +- (void)setQmui_badgeAttributedString:(NSAttributedString *)qmui_badgeAttributedString{ + objc_setAssociatedObject(self, &kAssociatedObjectKey_badgeAttributedString, qmui_badgeAttributedString, OBJC_ASSOCIATION_COPY_NONATOMIC); + if (qmui_badgeAttributedString) { + [self updateViewDidSetBlockIfNeeded]; + } + self.qmui_view.qmui_badgeAttributedString = qmui_badgeAttributedString; +} +- (NSAttributedString *)qmui_badgeAttributedString{ + return (NSAttributedString *)objc_getAssociatedObject(self, &kAssociatedObjectKey_badgeAttributedString); +} + + static char kAssociatedObjectKey_badgeBackgroundColor; - (void)setQmui_badgeBackgroundColor:(UIColor *)qmui_badgeBackgroundColor { objc_setAssociatedObject(self, &kAssociatedObjectKey_badgeBackgroundColor, qmui_badgeBackgroundColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC); diff --git a/QMUIKit/QMUIComponents/QMUIBadge/UIView+QMUIBadge.m b/QMUIKit/QMUIComponents/QMUIBadge/UIView+QMUIBadge.m index 98bf2ad4..ddde9700 100644 --- a/QMUIKit/QMUIComponents/QMUIBadge/UIView+QMUIBadge.m +++ b/QMUIKit/QMUIComponents/QMUIBadge/UIView+QMUIBadge.m @@ -150,6 +150,41 @@ - (NSString *)qmui_badgeString { return (NSString *)objc_getAssociatedObject(self, &kAssociatedObjectKey_badgeString); } +static char kAssociatedObjectKey_badgeAttributedString; +- (void)setQmui_badgeAttributedString:(NSAttributedString *)qmui_badgeAttributedString{ + objc_setAssociatedObject(self, &kAssociatedObjectKey_badgeAttributedString, qmui_badgeAttributedString, OBJC_ASSOCIATION_COPY_NONATOMIC); + + if (qmui_badgeAttributedString) { + if (!self.qmui_badgeLabel) { + self.qmui_badgeLabel = [[_QMUIBadgeLabel alloc] init]; + self.qmui_badgeLabel.clipsToBounds = YES; + self.qmui_badgeLabel.textAlignment = NSTextAlignmentCenter; + self.qmui_badgeLabel.backgroundColor = self.qmui_badgeBackgroundColor; + self.qmui_badgeLabel.font = [UIFont systemFontOfSize:0]; //font 设置为0避免图片周边出现偏移边距. + self.qmui_badgeLabel.contentEdgeInsets = self.qmui_badgeContentEdgeInsets; + self.qmui_badgeLabel.offset = self.qmui_badgeOffset; + self.qmui_badgeLabel.offsetLandscape = self.qmui_badgeOffsetLandscape; + BeginIgnoreDeprecatedWarning + self.qmui_badgeLabel.centerOffset = self.qmui_badgeCenterOffset; + self.qmui_badgeLabel.centerOffsetLandscape = self.qmui_badgeCenterOffsetLandscape; + EndIgnoreDeprecatedWarning + [self addSubview:self.qmui_badgeLabel]; + + [self updateLayoutSubviewsBlockIfNeeded]; + } + self.qmui_badgeLabel.attributedText = qmui_badgeAttributedString; + self.qmui_badgeLabel.hidden = NO; + [self setNeedsUpdateBadgeLabelLayout]; + self.clipsToBounds = NO; + }else{ + self.qmui_badgeLabel.hidden = YES; + } + +} +- (NSAttributedString *)qmui_badgeAttributedString{ + return (NSAttributedString *)objc_getAssociatedObject(self, &kAssociatedObjectKey_badgeAttributedString); +} + static char kAssociatedObjectKey_badgeBackgroundColor; - (void)setQmui_badgeBackgroundColor:(UIColor *)qmui_badgeBackgroundColor { objc_setAssociatedObject(self, &kAssociatedObjectKey_badgeBackgroundColor, qmui_badgeBackgroundColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC); @@ -252,7 +287,7 @@ - (_QMUIBadgeLabel *)qmui_badgeLabel { } - (void)setNeedsUpdateBadgeLabelLayout { - if (self.qmui_badgeString.length) { + if (self.qmui_badgeString.length || self.qmui_badgeAttributedString) { [self setNeedsLayout]; } }