UIBarButtonItem+YYAdd.m 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //
  2. // UIBarButtonItem+YYAdd.m
  3. // YYKit <https://github.com/ibireme/YYKit>
  4. //
  5. // Created by ibireme on 13/10/15.
  6. // Copyright (c) 2015 ibireme.
  7. //
  8. // This source code is licensed under the MIT-style license found in the
  9. // LICENSE file in the root directory of this source tree.
  10. //
  11. #import "UIBarButtonItem+YYAdd.h"
  12. #import "YYKitMacro.h"
  13. #import <objc/runtime.h>
  14. YYSYNTH_DUMMY_CLASS(UIBarButtonItem_YYAdd)
  15. static const int block_key;
  16. @interface _YYUIBarButtonItemBlockTarget : NSObject
  17. @property (nonatomic, copy) void (^block)(id sender);
  18. - (id)initWithBlock:(void (^)(id sender))block;
  19. - (void)invoke:(id)sender;
  20. @end
  21. @implementation _YYUIBarButtonItemBlockTarget
  22. - (id)initWithBlock:(void (^)(id sender))block{
  23. self = [super init];
  24. if (self) {
  25. _block = [block copy];
  26. }
  27. return self;
  28. }
  29. - (void)invoke:(id)sender {
  30. if (self.block) self.block(sender);
  31. }
  32. @end
  33. @implementation UIBarButtonItem (YYAdd)
  34. - (void)setActionBlock:(void (^)(id sender))block {
  35. _YYUIBarButtonItemBlockTarget *target = [[_YYUIBarButtonItemBlockTarget alloc] initWithBlock:block];
  36. objc_setAssociatedObject(self, &block_key, target, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  37. [self setTarget:target];
  38. [self setAction:@selector(invoke:)];
  39. }
  40. - (void (^)(id)) actionBlock {
  41. _YYUIBarButtonItemBlockTarget *target = objc_getAssociatedObject(self, &block_key);
  42. return target.block;
  43. }
  44. @end