1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- //
- // UIBarButtonItem+YYAdd.m
- // YYKit <https://github.com/ibireme/YYKit>
- //
- // 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 "YYKitMacro.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
|