用分类自定义UIBarButtonItem

原因:

  1. 项目中多次用到自定义UIBarButtonItem,所以需要抽取出来
  2. 代码该干什么就干什么,因为这段代码是自定义。UIBarButtonItem,所以应该由UIBarButtonItem做。所以创建一个分类。
  3. 命名习惯,代码规范。要用[UIBarButtonItem itemWith...]这种形式。
自定义UIBarButtonItem

UIBarButtonItem+Category.h文件

#import <UIKit/UIKit.h>

@interface UIBarButtonItem (Category)
+ (NSArray *)itemWithTarget:(id)target action:(SEL)action image:(NSString *)image lighlightImage:(NSString *)lighlightImage;
@end

UIBarButtonItem+Category.m文件

#import "UIBarButtonItem+Category.h"

@implementation UIBarButtonItem (Category)

/**
 *  自定义一个UIBarButtomItem
 *
 *  @param target         点击之后调用哪个对象
 *  @param action         点击之后调用对象里面的哪个方法
 *  @param image          普通状态下图片
 *  @param lighlightImage 高亮状态下图片
 *
 *  @return 创建完的一个UIBarButtomItem数组
 */
+ (NSArray *)itemWithTarget:(id)target action:(SEL)action image:(NSString *)image lighlightImage:(NSString *)lighlightImage {

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
    [button setImage:[UIImage imageNamed:lighlightImage] forState:UIControlStateHighlighted];
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    button.size = button.currentImage.size;

    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]initWithCustomView:button];
    UIBarButtonItem *speaceItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
    speaceItem.width = -5;

    return @[speaceItem,buttonItem];
}

@end
调用

在ViewController调用或者在自定义的UINavigationController的push方法里面调用。

//ViewController调用
self.navigationItem.leftBarButtonItems = [UIBarButtonItem itemWithTarget:self action:@selector(back) image:@"back_icon_red" lighlightImage:@"back_icon_red"];  
//自定义UINavigationController的push方法调用
viewController.navigationItem.leftBarButtonItems = [UIBarButtonItem itemWithTarget:self action:@selector(back) image:@"back_icon_red" lighlightImage:@"back_icon_red"];  

注意:action方法写在ViewController或自定义UINavigationController里面。

当然还可以在分类里做其他自定义的样式。

--EOF--