几乎每个APP中都会用到UIBarButtonItem, 今天写了一个类让小伙伴们更能直接体会到封装的好处
- 今天我讲一种自定义的UIBarButtonItem
- 今天听到一件事, 好像UIBarButtonItem是私有控件, 没有直接暴露接口, 所以自定义更好;
- 创建一个UIBarButtonItem的分类
- 在.h文件中创建对外部的接口
#import <UIKit/UIKit.h>
@interface UIBarButtonItem (Extension)
/**
* 自定义UIBarButtonItem
*
* @param taget taget 设置点击监听者
* @param action action 设置点击监听方法
* @param imageNormal imageNormal 设置UIBarButtonItem图片
* @param imageHighlighted imageHighlighted 设置UIBarButtonItem高亮如果
*
*/
+ (UIBarButtonItem *)barButtonItemTaget:(id)taget action:(SEL)action imageNormal:(NSString *)imageNormal imageHighlighted:(NSString *)imageHighlighted;
@end
- 在.m文件中实现自定义UIBarButtonItem的一些小功能
#import "UIBarButtonItem+Extension.h"
@implementation UIBarButtonItem (Extension)
/**
* 创建一个item
*
* @param taget 点击item后调用哪个对象方法
* @param action 点击item后调用target的哪个方法
* @param imageNormal 默认的图片
* @param imageHighlighted 高亮的图片
*
* @return 创建完的item
*/
+ (UIBarButtonItem *)barButtonItemTaget:(id)taget action:(SEL)action imageNormal:(NSString *)imageNormal imageHighlighted:(NSString *)imageHighlighted {
/** 设置导航栏上面的内容 */
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage:[UIImage imageNamed:imageNormal] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:imageHighlighted] forState:UIControlStateHighlighted];
[button addTarget:taget action:action forControlEvents:UIControlEventTouchUpInside];
// 这样创建出来之后添加到item中是不会显示出来的: 没有尺寸
// CGSize size = leftButton.currentBackgroundImage.size;
// leftButton.frame = CGRectMake(0, 0, 20, 30);
# 自定义frme, 几句代码以后都不用为计算控件frame而发愁
button.size = button.currentBackgroundImage.size;
// 谁push进来, 就从谁的左上角修改
return [[UIBarButtonItem alloc] initWithCustomView:button];
}
@end