//
|
// UIBarButtonItem+YYAdd.m
|
// YYCategories <https://github.com/ibireme/YYCategories>
|
//
|
// Created by ibireme on 13/10/15.
|
// Copyright (c) 2015 ibireme.
|
//
|
// This source code is licensed under the MIT-style license found in the
|
// LICENSE file in the root directory of this source tree.
|
//
|
|
#import "UIBarButtonItem+YYAdd.h"
|
#import "YYCategoriesMacro.h"
|
#import <objc/runtime.h>
|
|
YYSYNTH_DUMMY_CLASS(UIBarButtonItem_YYAdd)
|
|
|
static const int block_key;
|
|
@interface _YYUIBarButtonItemBlockTarget : NSObject
|
|
@property (nonatomic, copy) void (^block)(id sender);
|
|
- (id)initWithBlock:(void (^)(id sender))block;
|
- (void)invoke:(id)sender;
|
|
@end
|
|
@implementation _YYUIBarButtonItemBlockTarget
|
|
- (id)initWithBlock:(void (^)(id sender))block{
|
self = [super init];
|
if (self) {
|
_block = [block copy];
|
}
|
return self;
|
}
|
|
- (void)invoke:(id)sender {
|
if (self.block) self.block(sender);
|
}
|
|
@end
|
|
|
@implementation UIBarButtonItem (YYAdd)
|
|
- (void)setActionBlock:(void (^)(id sender))block {
|
_YYUIBarButtonItemBlockTarget *target = [[_YYUIBarButtonItemBlockTarget alloc] initWithBlock:block];
|
objc_setAssociatedObject(self, &block_key, target, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
[self setTarget:target];
|
[self setAction:@selector(invoke:)];
|
}
|
|
- (void (^)(id)) actionBlock {
|
_YYUIBarButtonItemBlockTarget *target = objc_getAssociatedObject(self, &block_key);
|
return target.block;
|
}
|
|
@end
|