RADatePickerViewController.m 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. //
  2. // RADatePickerViewController.m
  3. // Apex And Drivers
  4. //
  5. // Created by Jack on 2018/8/28.
  6. // Copyright © 2018年 USAI. All rights reserved.
  7. //
  8. #import "RADatePickerViewController.h"
  9. #import "RAPresentationController.h"
  10. @interface RADatePickerViewController () <UIViewControllerTransitioningDelegate>
  11. @property (strong, nonatomic) IBOutlet UILabel *titleLabel;
  12. @property (strong, nonatomic) IBOutlet UIDatePicker *datePicker;
  13. @property (nonatomic,copy) void(^blk)(NSDate *);
  14. @property (nonatomic,assign) UIDatePickerMode datePickerMode;
  15. @property (nonatomic,strong) NSDate *date;
  16. @end
  17. @implementation RADatePickerViewController
  18. + (NSString *)storyboardID {
  19. return NSStringFromClass([self class]);
  20. }
  21. + (instancetype)viewControllerFromStoryboard {
  22. RADatePickerViewController *datePickerVC = [[UIStoryboard storyboardWithName:@"date" bundle:nil] instantiateViewControllerWithIdentifier:[self storyboardID]];
  23. return datePickerVC;
  24. }
  25. + (void)presentDatePicker:(UIViewController *)viewController title:(NSString *)title dateMode:(UIDatePickerMode)mode defaultDate:(NSDate *)date withSetBlk:(void(^)(NSDate *date))blk {
  26. if (!viewController) {
  27. return;
  28. }
  29. RADatePickerViewController *datePickerVC = [self viewControllerFromStoryboard];
  30. datePickerVC.title = title;
  31. datePickerVC.blk = blk;
  32. datePickerVC.datePickerMode = mode;
  33. datePickerVC.date = date;
  34. datePickerVC.transitioningDelegate = datePickerVC;
  35. datePickerVC.modalPresentationStyle = UIModalPresentationCustom;
  36. // // CGFloat width = [UIScreen mainScreen].bounds.size.width - 40;
  37. // datePickerVC.preferredContentSize = CGSizeMake(300, 325);
  38. [viewController presentViewController:datePickerVC animated:YES completion:nil];
  39. }
  40. + (void)presentDatePicker:(UIViewController *)viewController title:(NSString *)title dateMode:(UIDatePickerMode)mode withSetBlk:(void(^)(NSDate *date))blk {
  41. [self presentDatePicker:viewController title:title dateMode:mode defaultDate:[NSDate date] withSetBlk:blk];
  42. }
  43. + (void)presentDatePicker:(UIViewController *)viewController title:(NSString *)title withSetBlk:(void(^)(NSDate *date))blk {
  44. [self presentDatePicker:viewController title:title dateMode:UIDatePickerModeDate withSetBlk:blk];
  45. }
  46. - (void)viewDidLoad {
  47. [super viewDidLoad];
  48. // Do any additional setup after loading the view.
  49. self.view.layer.cornerRadius = 10.0f;
  50. self.view.layer.masksToBounds = YES;
  51. self.datePicker.datePickerMode = self.datePickerMode;
  52. if (self.date) {
  53. self.datePicker.date = self.date;
  54. }
  55. self.titleLabel.text = self.title;
  56. CGFloat width = [UIScreen mainScreen].bounds.size.width - 40;
  57. self.preferredContentSize = CGSizeMake(width, width + 25);
  58. }
  59. - (void)didReceiveMemoryWarning {
  60. [super didReceiveMemoryWarning];
  61. // Dispose of any resources that can be recreated.
  62. }
  63. #pragma mark - UIViewControllerTransitioningDelegate
  64. - (UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented
  65. presentingViewController:(UIViewController *)presenting
  66. sourceViewController:(UIViewController *)source {
  67. return [[RAPresentationController alloc] initWithPresentedViewController:presented presentingViewController:presenting];
  68. }
  69. #pragma mark - Action
  70. - (IBAction)cancelBtnClick:(id)sender {
  71. [self dismissViewControllerAnimated:YES completion:nil];
  72. }
  73. - (IBAction)setBtnClick:(id)sender {
  74. __weak typeof(self) weakSelf = self;
  75. NSDate *date = self.datePicker.date;
  76. [self dismissViewControllerAnimated:YES completion:^{
  77. if (weakSelf) {
  78. __strong typeof(weakSelf) strongSelf = weakSelf;
  79. if (strongSelf.blk) {
  80. strongSelf.blk(date);
  81. }
  82. }
  83. }];
  84. }
  85. @end