123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- //
- // UIBarButtonItem+Extension.m
- // JWlive
- //
- // Created by pican zhang on 16/3/18.
- // Copyright © 2016年 pican zhang. All rights reserved.
- //
- #import "UIBarButtonItem+Extension.h"
- #import <objc/runtime.h>
- @implementation BackView
- - (instancetype)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- self.backgroundColor = [UIColor clearColor];
- }
- return self;
- }
- -(void)layoutSubviews{
- [super layoutSubviews];
- UINavigationBar *navBar = nil;
- UIView *aView = self.superview;
- while (aView) {
- if ([aView isKindOfClass:[UINavigationBar class]]) {
- navBar = (UINavigationBar *)aView;
- break;
- }
- aView = aView.superview;
- }
- UINavigationItem * navItem = (UINavigationItem *)navBar.items.lastObject;
- UIBarButtonItem *leftItem = navItem.leftBarButtonItem;
- UIBarButtonItem *rightItem = navItem.rightBarButtonItem;
- if (rightItem) {//右边按钮
- BackView *backView = rightItem.customView;
- if ([backView isKindOfClass:self.class]) {
- backView.btn.x = backView.frame.size.width -backView.btn.frame.size.width;
-
- }
- }
- if (leftItem) {//左边按钮
- // BackView *backView = leftItem.customView;
-
- }
- }
- @end
- @implementation UIBarButtonItem (createBtnItem)
- + (instancetype)itemWithImage:(NSString *)image highImage:(NSString *)highImage target:(id)target action:(SEL)action{
- return [self itemWithImage:image title:nil highImage:highImage contentEdge: UIEdgeInsetsMake(0,0,0,0)target:target action:(SEL)action];
- }
- + (instancetype)itemWithImage:(NSString *)image
- title:(NSString *)title highImage:(NSString *)highImage contentEdge:(UIEdgeInsets)contentEdge target:(id)target action:(SEL)action{
- UIButton *btn = [[UIButton alloc] init];
- [btn setImage:[UIImage imageNamed:image] forState:(UIControlStateNormal)];
- [btn setTitle:title forState:UIControlStateNormal];
- [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
- btn.titleLabel.font = [UIFont systemFontOfSize:14];
- btn.frame = CGRectMake(0, 0, 44, 44);
- btn.contentEdgeInsets = contentEdge;
- btn.backgroundColor = [UIColor whiteColor];
- [btn setEnlargeEdge:30];
- [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
- // UIView* containerView = [[UIView alloc]init];
- // containerView.backgroundColor = [UIColor greenColor];
- // [containerView addSubview:btn];
- // if (contentEdge.right<0) {
- // containerView.frame = CGRectMake(-20, 0, 44, 44);
- // }else{
- // containerView.frame = CGRectMake(20, 0, 44, 44);
- // }
- return [[UIBarButtonItem alloc] initWithCustomView:btn];
-
- // BackView *customView = [[BackView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
- // UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:target action:action];
- // [customView addGestureRecognizer:tap];
- // customView.btn = [UIButton buttonWithType:UIButtonTypeCustom];
- // customView.btn.titleLabel.font = [UIFont systemFontOfSize:14.0];
- // // customView.btn.contentEdgeInsets = contentEdge;
- // [customView.btn setImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
- // [customView.btn setImage:[UIImage imageNamed:highImage] forState:UIControlStateHighlighted];
- // [customView.btn setTitle:title forState:UIControlStateNormal];
- // [customView.btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
- // if (image) {
- // customView.btn.frame = CGRectMake(0, 0, customView.btn.currentImage.size.width, customView.btn.currentBackgroundImage.size.height);
- // }else{
- // customView.btn.frame = CGRectMake(0, 0, 44, 44);
- // }
- // customView.btn.frame = customView.bounds;
- // customView.btn.centerY = customView.center.y;
- // [customView.btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
- // [customView addSubview:customView.btn];
- // return [[UIBarButtonItem alloc] initWithCustomView:customView];
-
- }
- + (instancetype)itemWithFrame:(CGRect)frame Title:(NSString*)title titleFont:(UIFont*)font titleColor:(UIColor*)titleColor bkgColor:(UIColor*)bkgColor contentEdge:(UIEdgeInsets)contentEdge hasBorder:(BOOL)hasBorder borderBkgColor:(UIColor*)borderBkgColor target:(id)target action:(SEL)action{
-
- UIButton *btn = [[UIButton alloc] initWithFrame:frame];
- btn.backgroundColor = bkgColor;
- btn.titleLabel.textAlignment = UIBaselineAdjustmentAlignCenters;
- btn.titleLabel.font = font;
- [btn setTitle:title forState:(UIControlStateNormal)];
- [btn setTitleColor:titleColor forState:(UIControlStateNormal)];
- [btn setEnlargeEdgeWithTop:20 right:20 bottom:20 left:20];
- // btn.contentEdgeInsets = contentEdge;
- if (hasBorder) {
- btn.layer.borderColor = borderBkgColor.CGColor;
- btn.layer.borderWidth = 1.0;
- btn.layer.cornerRadius = 4.0;
- btn.layer.masksToBounds = YES;
- }
- // btn.titleEdgeInsets = UIEdgeInsetsMake(0,0, 0,0);
- [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
- return [[UIBarButtonItem alloc] initWithCustomView:btn];
- }
- + (instancetype)itemWithFrame:(CGRect)frame Title:(NSString*)title titleFont:(UIFont*)font titleColor:(UIColor*)titleColor target:(id)target action:(SEL)action{
-
- UIButton *btn = [[UIButton alloc] initWithFrame:frame];
- btn.titleLabel.textAlignment = UIBaselineAdjustmentAlignCenters;
- btn.titleLabel.font = font;
- btn.layer.cornerRadius = 2.0;
- btn.layer.borderWidth = 1.0;
- btn.layer.borderColor = [UIColor whiteColor].CGColor;
- [btn setTitle:title forState:(UIControlStateNormal)];
- [btn setTitleColor:titleColor forState:(UIControlStateNormal)];
- [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
- [btn setEnlargeEdgeWithTop:20 right:20 bottom:20 left:20];
- return [[UIBarButtonItem alloc] initWithCustomView:btn];
-
- }
- +(UIBarButtonItem *) text:(NSString *)text contentEdge:(UIEdgeInsets)contentEdge selector:(SEL)selecor target:(id)target
- {
- CGFloat width= [text sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]}].width;
- UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, width, 30)];
- [button setTitle:text forState:UIControlStateNormal];
- button.titleLabel.font = [UIFont systemFontOfSize:15];
- [button addTarget:target action:selecor forControlEvents:UIControlEventTouchUpInside];
- // button.contentEdgeInsets = contentEdge;
- return [[UIBarButtonItem alloc] initWithCustomView:button];
-
- }
- +(UIBarButtonItem *) icon:(NSString *)icon selector:(SEL)selecor target:(id)target
- {
- UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];
- [button setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal];
- [button addTarget:target action:selecor forControlEvents:UIControlEventTouchUpInside];
- return [[UIBarButtonItem alloc] initWithCustomView:button];
- }
- +(UIBarButtonItem *) back:(NSString *)title selector:(SEL)selecor target:(id)target
- {
-
- CGFloat width= [title sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:18]}].width;
- UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, width, 30)];
- [button setTitle:title forState:UIControlStateNormal];
- button.titleLabel.font = [UIFont systemFontOfSize:18];
- [button addTarget:target action:selecor forControlEvents:UIControlEventTouchUpInside];
- [button setImage:[UIImage imageNamed:@"nav_back_normal"] forState:UIControlStateNormal];
- [button setTitleEdgeInsets:UIEdgeInsetsMake(0, -5, 0, 0)];
- [button setImageEdgeInsets:UIEdgeInsetsMake(1, -15, 0, 0)];
- return [[UIBarButtonItem alloc] initWithCustomView:button];
- }
- +(UIBarButtonItem*)itemWithImage:(NSString *)image title:(NSString *)title target:(id)target action:(SEL)action{
- UIView *backView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 60, 44)];
- UIButton *btn = [[UIButton alloc] init];
- [btn setTitle:title forState:UIControlStateNormal];
- [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
- btn.titleLabel.font = [UIFont systemFontOfSize:12];
- btn.frame = CGRectMake(0, 0, 47, 44);
- [btn setTitleEdgeInsets:UIEdgeInsetsMake(0, -8, 0, 0)];
- // btn.lineBreakMode = NSLineBreakByTruncatingTail;
- [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
- [backView addSubview:btn];
- UIImageView *imgV = [[UIImageView alloc]initWithFrame:CGRectMake(42, 18, 13, 7)];
- imgV.contentMode = UIViewContentModeScaleAspectFill;
- imgV.clipsToBounds = YES;
- imgV.image = [UIImage imageNamed:image];
- [backView addSubview:imgV];
- return [[UIBarButtonItem alloc] initWithCustomView:backView];
- }
- NSString *const ZYBarButtonItem_hasBadgeKey = @"ZYBarButtonItem_hasBadgeKey";
- NSString *const ZYBarButtonItem_badgeKey = @"ZYBarButtonItem_badgeKey";
- NSString *const ZYBarButtonItem_badgeSizeKey = @"ZYBarButtonItem_badgeSizeKey";
- NSString *const ZYBarButtonItem_badgeOriginXKey = @"ZYBarButtonItem_badgeOriginXKey";
- NSString *const ZYBarButtonItem_badgeOriginYKey = @"ZYBarButtonItem_badgeOriginYKey";
- NSString *const ZYBarButtonItem_badgeColorKey = @"ZYBarButtonItem_badgeColorKey";
- @end
- @implementation UIBarButtonItem (Badge)
- @dynamic hasBadge;
- @dynamic badgeSize,badgeOriginX,badgeOriginY;
- - (void)initBadge
- {
- UIView *superview = nil;
-
- if (self.customView) {
- superview = self.customView;
- superview.clipsToBounds = NO;
- } else if ([self respondsToSelector:@selector(view)] && [(id)self view]) {
- superview = [(id)self view];
- }
- [superview addSubview:self.badge];
-
- // 默认设置 default configure
- self.badgeColor = [UIColor redColor];
- self.badgeSize = 8;
- self.badgeOriginX = 26;
- self.badgeOriginY = 11;
- self.badge.hidden = YES;
- }
- - (void)showBadge
- {
- self.badge.hidden = NO;
- }
- - (void)hideBadge
- {
- self.badge.hidden = YES;
- }
- - (void)refreshBadge
- {
- self.badge.frame = (CGRect){self.badgeOriginX,self.badgeOriginY,self.badgeSize,self.badgeSize};
- self.badge.backgroundColor = self.badgeColor;
- self.badge.layer.cornerRadius = self.badgeSize/2;
- }
- #pragma mark ---------- badge getter & setter function -----------
- - (UIView *)badge
- {
- UIView *badge = (UIView *)objc_getAssociatedObject(self, &ZYBarButtonItem_badgeKey);
- if (!badge) {
- badge = [[UIView alloc] init];
- [self setBadge:badge];
- [self initBadge];
- }
- return badge;
- }
- - (void)setBadge:(UIView *)badge
- {
- objc_setAssociatedObject(self, &ZYBarButtonItem_badgeKey, badge, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- }
- - (UIColor *)badgeColor
- {
- return objc_getAssociatedObject(self, &ZYBarButtonItem_badgeColorKey);
- }
- - (void)setBadgeColor:(UIColor *)badgeColor
- {
- objc_setAssociatedObject(self, &ZYBarButtonItem_badgeColorKey, badgeColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- if (self.badge) {
- [self refreshBadge];
- }
- }
- -(CGFloat)badgeSize {
- NSNumber *number = objc_getAssociatedObject(self, &ZYBarButtonItem_badgeSizeKey);
- return number.floatValue;
- }
- -(void)setBadgeSize:(CGFloat)badgeSize
- {
- NSNumber *number = [NSNumber numberWithDouble:badgeSize];
- objc_setAssociatedObject(self, &ZYBarButtonItem_badgeSizeKey, number, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- if (self.badge) {
- [self refreshBadge];
- }
- }
- -(CGFloat)badgeOriginX {
- NSNumber *number = objc_getAssociatedObject(self, &ZYBarButtonItem_badgeOriginXKey);
- return number.floatValue;
- }
- -(void)setBadgeOriginX:(CGFloat)badgeOriginX
- {
- NSNumber *number = [NSNumber numberWithDouble:badgeOriginX];
- objc_setAssociatedObject(self, &ZYBarButtonItem_badgeOriginXKey, number, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- if (self.badge) {
- [self refreshBadge];
- }
- }
- -(CGFloat)badgeOriginY {
- NSNumber *number = objc_getAssociatedObject(self, &ZYBarButtonItem_badgeOriginYKey);
- return number.floatValue;
- }
- -(void)setBadgeOriginY:(CGFloat)badgeOriginY
- {
- NSNumber *number = [NSNumber numberWithDouble:badgeOriginY];
- objc_setAssociatedObject(self, &ZYBarButtonItem_badgeOriginYKey, number, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- if (self.badge) {
- [self refreshBadge];
- }
- }
- - (void)setHasBadge:(BOOL)hasBadge
- {
- if (hasBadge) {
- [self showBadge];
- }else{
- [self hideBadge];
- }
-
- NSNumber *number = [NSNumber numberWithBool:hasBadge];
- objc_setAssociatedObject(self, &ZYBarButtonItem_hasBadgeKey, number, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- }
- - (BOOL)hasBadge
- {
- NSNumber *number = objc_getAssociatedObject(self, &ZYBarButtonItem_hasBadgeKey);
- return number.boolValue;
- }
- @end
|