分类 标签 存档 黑客派 订阅 搜索

用分类自定义 UIBarButtonItem

109 浏览

原因:

  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--

评论  
留下你的脚步
推荐阅读