MFMailComposeViewController+BlocksKit.m 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. //
  2. // MFMailComposeViewController+BlocksKit.m
  3. // BlocksKit
  4. //
  5. #import "A2DynamicDelegate.h"
  6. #import "MFMailComposeViewController+BlocksKit.h"
  7. #import "NSObject+A2BlockDelegate.h"
  8. #pragma mark Custom delegate
  9. @interface A2DynamicMFMailComposeViewControllerDelegate : A2DynamicDelegate <MFMailComposeViewControllerDelegate>
  10. @end
  11. @implementation A2DynamicMFMailComposeViewControllerDelegate
  12. - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
  13. {
  14. id realDelegate = self.realDelegate;
  15. BOOL shouldDismiss = (realDelegate && [realDelegate respondsToSelector:@selector(mailComposeController:didFinishWithResult:error:)]);
  16. if (shouldDismiss)
  17. [realDelegate mailComposeController:controller didFinishWithResult:result error:error];
  18. void (^block)(MFMailComposeViewController *, MFMailComposeResult, NSError *) = [self blockImplementationForMethod:_cmd];
  19. if (shouldDismiss) {
  20. if (block) block(controller, result, error);
  21. } else {
  22. #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000
  23. __weak typeof(controller) weakController = controller;
  24. [controller dismissViewControllerAnimated:YES completion:^{
  25. typeof(&*weakController) strongController = weakController;
  26. if (block) block(strongController, result, error);
  27. }];
  28. #else
  29. #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000
  30. if ([controller respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {
  31. __weak typeof(controller) weakController = controller;
  32. [controller dismissViewControllerAnimated:YES completion:^{
  33. typeof(&*weakController) strongController = weakController;
  34. if (block) block(strongController, result, error);
  35. }];
  36. } else {
  37. #endif
  38. [controller dismissModalViewControllerAnimated:YES];
  39. if (block) block(controller, result, error);
  40. #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000
  41. }
  42. #endif
  43. #endif
  44. }
  45. }
  46. @end
  47. #pragma mark Category
  48. @implementation MFMailComposeViewController (BlocksKit)
  49. @dynamic bk_completionBlock;
  50. + (void)load
  51. {
  52. @autoreleasepool {
  53. [self bk_registerDynamicDelegateNamed:@"mailComposeDelegate"];
  54. [self bk_linkDelegateMethods:@{ @"bk_completionBlock": @"mailComposeController:didFinishWithResult:error:" }];
  55. }
  56. }
  57. @end