BRDatePickerView.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. //
  2. // BRDatePickerView.h
  3. // BRPickerViewDemo
  4. //
  5. // Created by renbo on 2017/8/11.
  6. // Copyright © 2017 irenb. All rights reserved.
  7. //
  8. // 最新代码下载地址:https://github.com/91renb/BRPickerView
  9. #import "BRBaseView.h"
  10. #import "NSDate+BRPickerView.h"
  11. NS_ASSUME_NONNULL_BEGIN
  12. /// 日期选择器格式
  13. typedef NS_ENUM(NSInteger, BRDatePickerMode) {
  14. // ----- 以下4种是系统样式(兼容国际化日期格式) -----
  15. /** 【yyyy-MM-dd】UIDatePickerModeDate(美式日期:MM-dd-yyyy;英式日期:dd-MM-yyyy)*/
  16. BRDatePickerModeDate,
  17. /** 【yyyy-MM-dd HH:mm】 UIDatePickerModeDateAndTime */
  18. BRDatePickerModeDateAndTime,
  19. /** 【HH:mm】UIDatePickerModeTime */
  20. BRDatePickerModeTime,
  21. /** 【HH:mm】UIDatePickerModeCountDownTimer */
  22. BRDatePickerModeCountDownTimer,
  23. // ----- 以下11种是自定义样式 -----
  24. /** 【yyyy-MM-dd HH:mm:ss】年月日时分秒 */
  25. BRDatePickerModeYMDHMS,
  26. /** 【yyyy-MM-dd HH:mm】年月日时分 */
  27. BRDatePickerModeYMDHM,
  28. /** 【yyyy-MM-dd HH】年月日时 */
  29. BRDatePickerModeYMDH,
  30. /** 【MM-dd HH:mm】月日时分 */
  31. BRDatePickerModeMDHM,
  32. /** 【yyyy-MM-dd】年月日(兼容国际化日期:dd-MM-yyyy)*/
  33. BRDatePickerModeYMD,
  34. /** 【yyyy-MM】年月(兼容国际化日期:MM-yyyy)*/
  35. BRDatePickerModeYM,
  36. /** 【yyyy】年 */
  37. BRDatePickerModeY,
  38. /** 【MM-dd】月日 */
  39. BRDatePickerModeMD,
  40. /** 【HH:mm:ss】时分秒 */
  41. BRDatePickerModeHMS,
  42. /** 【HH:mm】时分 */
  43. BRDatePickerModeHM,
  44. /** 【mm:ss】分秒 */
  45. BRDatePickerModeMS
  46. };
  47. /// 日期单位显示的位置
  48. typedef NS_ENUM(NSInteger, BRShowUnitType) {
  49. /** 日期单位显示全部行(默认)*/
  50. BRShowUnitTypeAll,
  51. /** 日期单位仅显示中间行 */
  52. BRShowUnitTypeOnlyCenter,
  53. /** 日期单位不显示(隐藏日期单位)*/
  54. BRShowUnitTypeNone
  55. };
  56. typedef void (^BRDateResultBlock)(NSDate * _Nullable selectDate, NSString * _Nullable selectValue);
  57. @interface BRDatePickerView : BRBaseView
  58. /**
  59. //////////////////////////////////////////////////////////////////////////
  60. ///
  61. /// 【用法一】
  62. /// 特点:灵活,扩展性强(推荐使用!)
  63. ///
  64. ////////////////////////////////////////////////////////////////////////*/
  65. /** 日期选择器显示类型 */
  66. @property (nonatomic, assign) BRDatePickerMode pickerMode;
  67. /** 设置选中的日期(推荐使用 selectDate) */
  68. @property (nullable, nonatomic, strong) NSDate *selectDate;
  69. @property (nullable, nonatomic, copy) NSString *selectValue;
  70. /** 最小日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)*/
  71. @property (nullable, nonatomic, strong) NSDate *minDate;
  72. /** 最大日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)*/
  73. @property (nullable, nonatomic, strong) NSDate *maxDate;
  74. /** 选择结果的回调 */
  75. @property (nullable, nonatomic, copy) BRDateResultBlock resultBlock;
  76. /** 滚动选择时触发的回调 */
  77. @property (nullable, nonatomic, copy) BRDateResultBlock changeBlock;
  78. /** 日期单位显示类型 */
  79. @property (nonatomic, assign) BRShowUnitType showUnitType;
  80. /** 是否显示【星期】,默认为 NO */
  81. @property (nonatomic, assign, getter=isShowWeek) BOOL showWeek;
  82. /** 是否显示【今天】,默认为 NO */
  83. @property (nonatomic, assign, getter=isShowToday) BOOL showToday;
  84. /** 是否添加【至今】,默认为 NO */
  85. @property (nonatomic, assign, getter=isAddToNow) BOOL addToNow;
  86. /** 首行添加【自定义字符串】,配合 selectValue 可设置默认选中 */
  87. @property (nullable, nonatomic, copy) NSString *firstRowContent;
  88. /** 末行添加【自定义字符串】,配合 selectValue 可设置默认选中 */
  89. @property (nullable, nonatomic, copy) NSString *lastRowContent;
  90. /** 最后一行,添加【自定义字符串】 */
  91. @property (nullable, nonatomic, copy) NSString *addCustomString DEPRECATED_MSG_ATTRIBUTE("Use 'lastRowContent' instead");
  92. /** 滚轮上日期数据排序是否降序,默认为 NO(升序)*/
  93. @property (nonatomic, assign, getter=isDescending) BOOL descending;
  94. /** 选择器上数字是否带有前导零,默认为 NO(如:无前导零:2020-1-1;有前导零:2020-01-01)*/
  95. @property (nonatomic, assign, getter=isNumberFullName) BOOL numberFullName;
  96. /** 设置分的时间间隔,默认为1(范围:1 ~ 30)*/
  97. @property (nonatomic, assign) NSInteger minuteInterval;
  98. /** 设置秒的时间间隔,默认为1(范围:1 ~ 30)*/
  99. @property (nonatomic, assign) NSInteger secondInterval;
  100. /** 设置倒计时的时长,默认为0(范围:0 ~ 24*60*60-1,单位为秒) for `BRDatePickerModeCountDownTimer`, ignored otherwise. */
  101. @property (nonatomic, assign) NSTimeInterval countDownDuration;
  102. /**
  103. * 自定义月份数据源
  104. * 如:@[@"1月", @"2月",..., @"12月"]、 @[@"一月", @"二月",..., @"十二月"]、 @[@"Jan", @"Feb",..., @"Dec"] 等
  105. */
  106. @property (nonatomic, copy) NSArray <NSString *> *monthNames;
  107. /**
  108. * 自定义日期单位
  109. * 字典格式:@{@"year": @"年", @"month": @"月", @"day": @"日", @"hour": @"时", @"minute": @"分", @"second": @"秒"}
  110. */
  111. @property (nonatomic, copy) NSDictionary *customUnit;
  112. /** 显示上午和下午,默认为 NO. for `BRDatePickerModeYMDH`, ignored otherwise. */
  113. @property (nonatomic, assign, getter=isShowAMAndPM) BOOL showAMAndPM;
  114. /** 设置时区,默认为当前时区 */
  115. @property (nullable, nonatomic, copy) NSTimeZone *timeZone;
  116. /** default is [NSCalendar currentCalendar]. setting nil returns to default. for `UIDatePicker` */
  117. @property (nonatomic, copy) NSCalendar *calendar;
  118. /** 指定不允许选择的日期 */
  119. @property (nullable, nonatomic, copy) NSArray <NSDate *> *nonSelectableDates;
  120. /// 初始化日期选择器
  121. /// @param pickerMode 日期选择器显示类型
  122. - (instancetype)initWithPickerMode:(BRDatePickerMode)pickerMode;
  123. /// 弹出选择器视图
  124. - (void)show;
  125. /// 关闭选择器视图
  126. - (void)dismiss;
  127. //================================================= 华丽的分割线 =================================================
  128. /**
  129. //////////////////////////////////////////////////////////////////////////
  130. ///
  131. /// 【用法二】:快捷使用,直接选择下面其中的一个方法进行使用
  132. /// 特点:快捷,方便
  133. ///
  134. ////////////////////////////////////////////////////////////////////////*/
  135. /**
  136. * 1.显示日期选择器
  137. *
  138. * @param mode 日期显示类型
  139. * @param title 选择器标题
  140. * @param selectValue 默认选中的日期(默认选中当前日期)
  141. * @param resultBlock 选择结果的回调
  142. *
  143. */
  144. + (void)showDatePickerWithMode:(BRDatePickerMode)mode
  145. title:(nullable NSString *)title
  146. selectValue:(nullable NSString *)selectValue
  147. resultBlock:(nullable BRDateResultBlock)resultBlock;
  148. /**
  149. * 2.显示日期选择器
  150. *
  151. * @param mode 日期显示类型
  152. * @param title 选择器标题
  153. * @param selectValue 默认选中的日期(默认选中当前日期)
  154. * @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO
  155. * @param resultBlock 选择结果的回调
  156. *
  157. */
  158. + (void)showDatePickerWithMode:(BRDatePickerMode)mode
  159. title:(nullable NSString *)title
  160. selectValue:(nullable NSString *)selectValue
  161. isAutoSelect:(BOOL)isAutoSelect
  162. resultBlock:(nullable BRDateResultBlock)resultBlock;
  163. /**
  164. * 3.显示日期选择器
  165. *
  166. * @param mode 日期显示类型
  167. * @param title 选择器标题
  168. * @param selectValue 默认选中的日期(默认选中当前日期)
  169. * @param minDate 最小日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)
  170. * @param maxDate 最大日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)
  171. * @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO
  172. * @param resultBlock 选择结果的回调
  173. *
  174. */
  175. + (void)showDatePickerWithMode:(BRDatePickerMode)mode
  176. title:(nullable NSString *)title
  177. selectValue:(nullable NSString *)selectValue
  178. minDate:(nullable NSDate *)minDate
  179. maxDate:(nullable NSDate *)maxDate
  180. isAutoSelect:(BOOL)isAutoSelect
  181. resultBlock:(nullable BRDateResultBlock)resultBlock;
  182. @end
  183. NS_ASSUME_NONNULL_END