UIPopoverController+BlocksKit.m 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. //
  2. // UIPopoverController+BlocksKit.m
  3. // BlocksKit
  4. //
  5. #import "A2DynamicDelegate.h"
  6. #import "NSObject+A2BlockDelegate.h"
  7. #import "UIPopoverController+BlocksKit.h"
  8. #pragma mark - Delegate
  9. @interface A2DynamicUIPopoverControllerDelegate : A2DynamicDelegate <UIPopoverControllerDelegate>
  10. @end
  11. @implementation A2DynamicUIPopoverControllerDelegate
  12. - (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
  13. {
  14. BOOL should = YES;
  15. id realDelegate = self.realDelegate;
  16. if (realDelegate && [realDelegate respondsToSelector:@selector(popoverControllerShouldDismissPopover:)])
  17. should &= [realDelegate popoverControllerShouldDismissPopover:popoverController];
  18. BOOL (^block)(UIPopoverController *) = [self blockImplementationForMethod:_cmd];
  19. if (block) should &= block(popoverController);
  20. return should;
  21. }
  22. - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
  23. {
  24. id realDelegate = self.realDelegate;
  25. if (realDelegate && [realDelegate respondsToSelector:@selector(popoverControllerDidDismissPopover:)])
  26. [realDelegate popoverControllerDidDismissPopover:popoverController];
  27. void (^block)(UIPopoverController *) = [self blockImplementationForMethod:_cmd];
  28. if (block) block(popoverController);
  29. }
  30. @end
  31. #pragma mark - Category
  32. @implementation UIPopoverController (BlocksKit)
  33. @dynamic bk_didDismissBlock, bk_shouldDismissBlock;
  34. + (void)load
  35. {
  36. @autoreleasepool {
  37. [self bk_registerDynamicDelegate];
  38. [self bk_linkDelegateMethods:@{ @"bk_didDismissBlock": @"popoverControllerDidDismissPopover:", @"bk_shouldDismissBlock": @"popoverControllerShouldDismissPopover:" }];
  39. }
  40. }
  41. @end