原因:
- 项目中多次用到自定义UIBarButtonItem,所以需要抽取出来
- 代码该干什么就干什么,因为这段代码是自定义。UIBarButtonItem,所以应该由UIBarButtonItem做。所以创建一个分类。
- 命名习惯,代码规范。要用[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–