cdts/xdts-ios 3/TreeHole/Code/Utility/WZLBadge/BarItem/UITabBarItem+WZLBadge.m
2023-07-27 09:20:00 +08:00

170 lines
3.4 KiB
Objective-C
Executable File

//
// 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];
}
/**
* 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;
}
- (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;
}
#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