| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- //
- // UITabBarItem+WZLBadge.m
- // WZLBadgeDemo
- //
- // Created by zilin_weng on 15/9/24.
- // Copyright (c) 2015年 Weng-Zilin. All rights reserved.
- //
- #import "UITabBarItem+WZLBadge.h"
- #define kActualView [self getActualBadgeSuperView]
- @implementation UITabBarItem (WZLBadge)
- #pragma mark -- public methods
- /**
- * show badge with red dot style and WBadgeAnimTypeNone by default.
- */
- - (void)showBadge
- {
- [kActualView showBadge];
- }
- /**
- * showBadge
- *
- * @param style WBadgeStyle type
- * @param value (if 'style' is WBadgeStyleRedDot or WBadgeStyleNew,
- this value will be ignored. In this case, any value will be ok.)
- * @param aniType
- */
- - (void)showBadgeWithStyle:(WBadgeStyle)style
- value:(NSInteger)value
- animationType:(WBadgeAnimType)aniType
- {
- [kActualView showBadgeWithStyle:style value:value animationType:aniType];
- }
- - (UIView *)find:(UIView *)view firstSubviewWithClass:(Class)cls
- {
- __block UIView *targetView = nil;
- [view.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL * _Nonnull stop) {
- if ([subview isKindOfClass:cls]) {
- targetView = subview;
- *stop = YES;
- }
- }];
- return targetView;
- }
- /**
- * clear badge
- */
- - (void)clearBadge
- {
- [kActualView clearBadge];
- }
- - (void)resumeBadge
- {
- [kActualView resumeBadge];
- }
- #pragma mark -- private method
- /**
- * Because UIBarButtonItem is kind of NSObject, it is not able to directly attach badge.
- This method is used to find actual view (non-nil) inside UIBarButtonItem instance.
- *
- * @return view
- */
- - (UIView *)getActualBadgeSuperView
- {
- // 1.get UITabbarButtion
- UIView *bottomView = [self valueForKeyPath:@"_view"];
-
- // 2.get imageView, to make sure badge front at anytime.
- UIView *actualSuperView = nil;
- if (bottomView) {
- actualSuperView = [self find:bottomView firstSubviewWithClass:NSClassFromString(@"UITabBarSwappableImageView")];
- }
-
- // badge label will be added onto imageView
- return actualSuperView;
- }
- #pragma mark -- setter/getter
- - (UILabel *)badge
- {
- return kActualView.badge;
- }
- - (void)setBadge:(UILabel *)label
- {
- [kActualView setBadge:label];
- }
- - (UIFont *)badgeFont
- {
- return kActualView.badgeFont;
- }
- - (void)setBadgeFont:(UIFont *)badgeFont
- {
- [kActualView setBadgeFont:badgeFont];
- }
- - (UIColor *)badgeBgColor
- {
- return [kActualView badgeBgColor];
- }
- - (void)setBadgeBgColor:(UIColor *)badgeBgColor
- {
- [kActualView setBadgeBgColor:badgeBgColor];
- }
- - (UIColor *)badgeTextColor
- {
- return [kActualView badgeTextColor];
- }
- - (void)setBadgeTextColor:(UIColor *)badgeTextColor
- {
- [kActualView setBadgeTextColor:badgeTextColor];
- }
- - (WBadgeAnimType)aniType
- {
- return [kActualView aniType];
- }
- - (void)setAniType:(WBadgeAnimType)aniType
- {
- [kActualView setAniType:aniType];
- }
- - (CGRect)badgeFrame
- {
- return [kActualView badgeFrame];
- }
- - (void)setBadgeFrame:(CGRect)badgeFrame
- {
- [kActualView setBadgeFrame:badgeFrame];
- }
- - (CGPoint)badgeCenterOffset
- {
- return [kActualView badgeCenterOffset];
- }
- - (void)setBadgeCenterOffset:(CGPoint)badgeCenterOffset
- {
- [kActualView setBadgeCenterOffset:badgeCenterOffset];
- }
- - (NSInteger)badgeMaximumBadgeNumber
- {
- return [kActualView badgeMaximumBadgeNumber];
- }
- - (void)setBadgeMaximumBadgeNumber:(NSInteger)badgeMaximumBadgeNumber
- {
- [kActualView setBadgeMaximumBadgeNumber:badgeMaximumBadgeNumber];
- }
- @end
|