BRDatePickerView.m 85 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965
  1. //
  2. // BRDatePickerView.m
  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 "BRDatePickerView.h"
  10. #import "NSBundle+BRPickerView.h"
  11. #import "BRDatePickerView+BR.h"
  12. /// 日期选择器的类型
  13. typedef NS_ENUM(NSInteger, BRDatePickerStyle) {
  14. BRDatePickerStyleSystem, // 系统样式:使用 UIDatePicker
  15. BRDatePickerStyleCustom // 自定义样式:使用 UIPickerView
  16. };
  17. @interface BRDatePickerView ()<UIPickerViewDataSource, UIPickerViewDelegate>
  18. {
  19. UIDatePickerMode _datePickerMode;
  20. UIView *_containerView;
  21. BOOL _isAdjustSelectRow; // 设置minDate时,调整日期联动的选择(解决日期选择器联动不正确的问题)
  22. }
  23. /** 日期选择器1 */
  24. @property (nonatomic, strong) UIDatePicker *datePicker;
  25. /** 日期选择器2 */
  26. @property (nonatomic, strong) UIPickerView *pickerView;
  27. /// 日期存储数组
  28. @property(nonatomic, copy) NSArray *yearArr;
  29. @property(nonatomic, copy) NSArray *monthArr;
  30. @property(nonatomic, copy) NSArray *dayArr;
  31. @property(nonatomic, copy) NSArray *hourArr;
  32. @property(nonatomic, copy) NSArray *minuteArr;
  33. @property(nonatomic, copy) NSArray *secondArr;
  34. /// 月周、年周、季度数组
  35. @property(nonatomic, copy) NSArray *monthWeekArr;
  36. @property(nonatomic, copy) NSArray *yearWeekArr;
  37. @property(nonatomic, copy) NSArray *quarterArr;
  38. /// 记录 年、月、日、时、分、秒 当前选择的位置
  39. @property(nonatomic, assign) NSInteger yearIndex;
  40. @property(nonatomic, assign) NSInteger monthIndex;
  41. @property(nonatomic, assign) NSInteger dayIndex;
  42. @property(nonatomic, assign) NSInteger hourIndex;
  43. @property(nonatomic, assign) NSInteger minuteIndex;
  44. @property(nonatomic, assign) NSInteger secondIndex;
  45. /// 月周、年周、季度 当前选择的位置
  46. @property(nonatomic, assign) NSInteger monthWeekIndex;
  47. @property(nonatomic, assign) NSInteger yearWeekIndex;
  48. @property(nonatomic, assign) NSInteger quarterIndex;
  49. // 记录选择的值
  50. @property (nonatomic, strong) NSDate *mSelectDate;
  51. @property (nonatomic, copy) NSString *mSelectValue;
  52. /** 日期选择器的类型 */
  53. @property (nonatomic, assign) BRDatePickerStyle style;
  54. /** 日期的格式 */
  55. @property (nonatomic, copy) NSString *dateFormatter;
  56. /** 单位数组 */
  57. @property (nonatomic, copy) NSArray *unitArr;
  58. /** 单位label数组 */
  59. @property (nonatomic, copy) NSArray <UILabel *> *unitLabelArr;
  60. @end
  61. @implementation BRDatePickerView
  62. #pragma mark - 1.显示日期选择器
  63. + (void)showDatePickerWithMode:(BRDatePickerMode)mode
  64. title:(NSString *)title
  65. selectValue:(NSString *)selectValue
  66. resultBlock:(BRDateResultBlock)resultBlock {
  67. [self showDatePickerWithMode:mode title:title selectValue:selectValue minDate:nil maxDate:nil isAutoSelect:NO resultBlock:resultBlock];
  68. }
  69. #pragma mark - 2.显示日期选择器
  70. + (void)showDatePickerWithMode:(BRDatePickerMode)mode
  71. title:(NSString *)title
  72. selectValue:(NSString *)selectValue
  73. isAutoSelect:(BOOL)isAutoSelect
  74. resultBlock:(BRDateResultBlock)resultBlock {
  75. [self showDatePickerWithMode:mode title:title selectValue:selectValue minDate:nil maxDate:nil isAutoSelect:isAutoSelect resultBlock:resultBlock];
  76. }
  77. #pragma mark - 3.显示日期选择器
  78. + (void)showDatePickerWithMode:(BRDatePickerMode)mode
  79. title:(NSString *)title
  80. selectValue:(NSString *)selectValue
  81. minDate:(NSDate *)minDate
  82. maxDate:(NSDate *)maxDate
  83. isAutoSelect:(BOOL)isAutoSelect
  84. resultBlock:(BRDateResultBlock)resultBlock {
  85. [self showDatePickerWithMode:mode title:title selectValue:selectValue minDate:nil maxDate:nil isAutoSelect:isAutoSelect resultBlock:resultBlock resultRangeBlock:nil];
  86. }
  87. #pragma mark - 4.显示日期选择器
  88. + (void)showDatePickerWithMode:(BRDatePickerMode)mode
  89. title:(NSString *)title
  90. selectValue:(NSString *)selectValue
  91. minDate:(NSDate *)minDate
  92. maxDate:(NSDate *)maxDate
  93. isAutoSelect:(BOOL)isAutoSelect
  94. resultBlock:(BRDateResultBlock)resultBlock
  95. resultRangeBlock:(BRDateResultRangeBlock)resultRangeBlock {
  96. // 创建日期选择器
  97. BRDatePickerView *datePickerView = [[BRDatePickerView alloc]init];
  98. datePickerView.pickerMode = mode;
  99. datePickerView.title = title;
  100. datePickerView.selectValue = selectValue;
  101. datePickerView.minDate = minDate;
  102. datePickerView.maxDate = maxDate;
  103. datePickerView.isAutoSelect = isAutoSelect;
  104. datePickerView.resultBlock = resultBlock;
  105. datePickerView.resultRangeBlock = resultRangeBlock;
  106. // 显示
  107. [datePickerView show];
  108. }
  109. #pragma mark - 初始化日期选择器
  110. - (instancetype)initWithPickerMode:(BRDatePickerMode)pickerMode {
  111. if (self = [super init]) {
  112. self.pickerMode = pickerMode;
  113. }
  114. return self;
  115. }
  116. #pragma mark - 处理选择器数据
  117. - (void)handlerPickerData {
  118. // 1.最小日期限制
  119. self.minDate = [self handlerMinDate:self.minDate];
  120. // 2.最大日期限制
  121. self.maxDate = [self handlerMaxDate:self.maxDate];
  122. BOOL minMoreThanMax = [self br_compareDate:self.minDate targetDate:self.maxDate dateFormat:self.dateFormatter] == NSOrderedDescending;
  123. NSAssert(!minMoreThanMax, @"最小日期不能大于最大日期!");
  124. if (minMoreThanMax) {
  125. // 如果最小日期大于了最大日期,就忽略两个值
  126. self.minDate = [NSDate distantPast]; // 0000-12-30 00:00:00 +0000
  127. self.maxDate = [NSDate distantFuture]; // 4001-01-01 00:00:00 +0000
  128. }
  129. // 3.默认选中的日期
  130. self.mSelectDate = [self handlerSelectDate:self.selectDate dateFormat:self.dateFormatter];
  131. // 4.设置选择器日期数据
  132. if (self.style == BRDatePickerStyleCustom) {
  133. [self setupDateArray];
  134. }
  135. if (self.selectValue && ([self.selectValue isEqualToString:self.lastRowContent] || [self.selectValue isEqualToString:self.firstRowContent])) {
  136. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  137. } else {
  138. if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) {
  139. self.hourIndex = (self.mSelectDate.br_hour < 12 ? 0 : 1);
  140. self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %@", (int)self.mSelectDate.br_year, (int)self.mSelectDate.br_month, (int)self.mSelectDate.br_day, [self getHourString]];
  141. } else {
  142. self.mSelectValue = [self br_stringFromDate:self.mSelectDate dateFormat:self.dateFormatter];
  143. }
  144. }
  145. }
  146. #pragma mark - 设置默认日期数据源
  147. - (void)setupDateArray {
  148. if (self.selectValue && ([self.selectValue isEqualToString:self.lastRowContent] || [self.selectValue isEqualToString:self.firstRowContent])) {
  149. switch (self.pickerMode) {
  150. case BRDatePickerModeYMDHMS:
  151. case BRDatePickerModeYMDHM:
  152. case BRDatePickerModeYMDH:
  153. case BRDatePickerModeYMD:
  154. case BRDatePickerModeYM:
  155. case BRDatePickerModeY:
  156. {
  157. self.yearArr = [self getYearArr];
  158. self.monthArr = nil;
  159. self.dayArr = nil;
  160. self.hourArr = nil;
  161. self.minuteArr = nil;
  162. self.secondArr = nil;
  163. self.monthWeekArr = nil;
  164. self.yearWeekArr = nil;
  165. self.quarterArr = nil;
  166. }
  167. break;
  168. case BRDatePickerModeMDHM:
  169. case BRDatePickerModeMD:
  170. {
  171. self.yearArr = [self getYearArr];
  172. self.monthArr = [self getMonthArr:self.mSelectDate.br_year];
  173. self.dayArr = nil;
  174. self.hourArr = nil;
  175. self.minuteArr = nil;
  176. self.secondArr = nil;
  177. self.monthWeekArr = nil;
  178. self.yearWeekArr = nil;
  179. self.quarterArr = nil;
  180. }
  181. break;
  182. case BRDatePickerModeHMS:
  183. case BRDatePickerModeHM:
  184. {
  185. self.yearArr = [self getYearArr];
  186. self.monthArr = [self getMonthArr:self.mSelectDate.br_year];
  187. self.dayArr = [self getDayArr:self.mSelectDate.br_year month:self.mSelectDate.br_month];
  188. self.hourArr = [self getHourArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day];
  189. self.minuteArr = nil;
  190. self.secondArr = nil;
  191. self.monthWeekArr = nil;
  192. self.yearWeekArr = nil;
  193. self.quarterArr = nil;
  194. }
  195. break;
  196. case BRDatePickerModeMS:
  197. {
  198. self.yearArr = [self getYearArr];
  199. self.monthArr = [self getMonthArr:self.mSelectDate.br_year];
  200. self.dayArr = [self getDayArr:self.mSelectDate.br_year month:self.mSelectDate.br_month];
  201. self.hourArr = [self getHourArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day];
  202. self.minuteArr = [self getMinuteArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day hour:self.mSelectDate.br_hour];
  203. self.secondArr = nil;
  204. self.monthWeekArr = nil;
  205. self.yearWeekArr = nil;
  206. self.quarterArr = nil;
  207. }
  208. break;
  209. case BRDatePickerModeYMW:
  210. {
  211. self.yearArr = [self getYearArr];
  212. self.monthArr = [self getMonthArr:self.mSelectDate.br_year];
  213. self.monthWeekArr = [self getMonthWeekArr:self.mSelectDate.br_year month:self.mSelectDate.br_month];
  214. self.yearWeekArr = nil;
  215. self.quarterArr = nil;
  216. self.dayArr = nil;
  217. self.hourArr = nil;
  218. self.minuteArr = nil;
  219. self.secondArr = nil;
  220. }
  221. break;
  222. case BRDatePickerModeYW:
  223. {
  224. self.yearArr = [self getYearArr];
  225. self.monthArr = nil;
  226. self.monthWeekArr = nil;
  227. self.yearWeekArr = [self getYearWeekArr:self.mSelectDate.br_year];
  228. self.quarterArr = nil;
  229. self.dayArr = nil;
  230. self.hourArr = nil;
  231. self.minuteArr = nil;
  232. self.secondArr = nil;
  233. }
  234. break;
  235. case BRDatePickerModeYQ:
  236. {
  237. self.yearArr = [self getYearArr];
  238. self.monthArr = nil;
  239. self.monthWeekArr = nil;
  240. self.yearWeekArr = nil;
  241. self.quarterArr = [self getQuarterArr:self.mSelectDate.br_year];;
  242. self.dayArr = nil;
  243. self.hourArr = nil;
  244. self.minuteArr = nil;
  245. self.secondArr = nil;
  246. }
  247. break;
  248. default:
  249. break;
  250. }
  251. } else {
  252. self.yearArr = [self getYearArr];
  253. self.monthArr = [self getMonthArr:self.mSelectDate.br_year];
  254. self.dayArr = [self getDayArr:self.mSelectDate.br_year month:self.mSelectDate.br_month];
  255. self.hourArr = [self getHourArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day];
  256. self.minuteArr = [self getMinuteArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day hour:self.mSelectDate.br_hour];
  257. self.secondArr = [self getSecondArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day hour:self.mSelectDate.br_hour minute:self.mSelectDate.br_minute];
  258. self.monthWeekArr = [self getMonthWeekArr:self.mSelectDate.br_year month:self.mSelectDate.br_month];
  259. self.yearWeekArr = [self getYearWeekArr:self.mSelectDate.br_year];
  260. self.quarterArr = [self getQuarterArr:self.mSelectDate.br_year];
  261. }
  262. }
  263. - (void)setupDateFormatter:(BRDatePickerMode)mode {
  264. switch (mode) {
  265. case BRDatePickerModeDate:
  266. {
  267. self.dateFormatter = @"yyyy-MM-dd";
  268. self.style = BRDatePickerStyleSystem;
  269. _datePickerMode = UIDatePickerModeDate;
  270. }
  271. break;
  272. case BRDatePickerModeDateAndTime:
  273. {
  274. self.dateFormatter = @"yyyy-MM-dd HH:mm";
  275. self.style = BRDatePickerStyleSystem;
  276. _datePickerMode = UIDatePickerModeDateAndTime;
  277. }
  278. break;
  279. case BRDatePickerModeTime:
  280. {
  281. self.dateFormatter = @"HH:mm";
  282. self.style = BRDatePickerStyleSystem;
  283. _datePickerMode = UIDatePickerModeTime;
  284. }
  285. break;
  286. case BRDatePickerModeCountDownTimer:
  287. {
  288. self.dateFormatter = @"HH:mm";
  289. self.style = BRDatePickerStyleSystem;
  290. _datePickerMode = UIDatePickerModeCountDownTimer;
  291. }
  292. break;
  293. case BRDatePickerModeYMDHMS:
  294. {
  295. self.dateFormatter = @"yyyy-MM-dd HH:mm:ss";
  296. self.style = BRDatePickerStyleCustom;
  297. self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit], [self getHourUnit], [self getMinuteUnit], [self getSecondUnit]];
  298. }
  299. break;
  300. case BRDatePickerModeYMDHM:
  301. {
  302. self.dateFormatter = @"yyyy-MM-dd HH:mm";
  303. self.style = BRDatePickerStyleCustom;
  304. self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit], [self getHourUnit], [self getMinuteUnit]];
  305. }
  306. break;
  307. case BRDatePickerModeYMDH:
  308. {
  309. self.dateFormatter = @"yyyy-MM-dd HH";
  310. self.style = BRDatePickerStyleCustom;
  311. self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit], self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM ? @"" : [self getHourUnit]];
  312. }
  313. break;
  314. case BRDatePickerModeMDHM:
  315. {
  316. self.dateFormatter = @"MM-dd HH:mm";
  317. self.style = BRDatePickerStyleCustom;
  318. self.unitArr = @[[self getMonthUnit], [self getDayUnit], [self getHourUnit], [self getMinuteUnit]];
  319. }
  320. break;
  321. case BRDatePickerModeYMD:
  322. {
  323. self.dateFormatter = @"yyyy-MM-dd";
  324. self.style = BRDatePickerStyleCustom;
  325. self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit]];
  326. }
  327. break;
  328. case BRDatePickerModeYM:
  329. {
  330. self.dateFormatter = @"yyyy-MM";
  331. self.style = BRDatePickerStyleCustom;
  332. self.unitArr = @[[self getYearUnit], [self getMonthUnit]];
  333. }
  334. break;
  335. case BRDatePickerModeY:
  336. {
  337. self.dateFormatter = @"yyyy";
  338. self.style = BRDatePickerStyleCustom;
  339. self.unitArr = @[[self getYearUnit]];
  340. }
  341. break;
  342. case BRDatePickerModeMD:
  343. {
  344. self.dateFormatter = @"MM-dd";
  345. self.style = BRDatePickerStyleCustom;
  346. self.unitArr = @[[self getMonthUnit], [self getDayUnit]];
  347. }
  348. break;
  349. case BRDatePickerModeHMS:
  350. {
  351. self.dateFormatter = @"HH:mm:ss";
  352. self.style = BRDatePickerStyleCustom;
  353. self.unitArr = @[[self getHourUnit], [self getMinuteUnit], [self getSecondUnit]];
  354. }
  355. break;
  356. case BRDatePickerModeHM:
  357. {
  358. self.dateFormatter = @"HH:mm";
  359. self.style = BRDatePickerStyleCustom;
  360. self.unitArr = @[[self getHourUnit], [self getMinuteUnit]];
  361. }
  362. break;
  363. case BRDatePickerModeMS:
  364. {
  365. self.dateFormatter = @"mm:ss";
  366. self.style = BRDatePickerStyleCustom;
  367. self.unitArr = @[[self getMinuteUnit], [self getSecondUnit]];
  368. }
  369. break;
  370. case BRDatePickerModeYMW:
  371. {
  372. self.dateFormatter = @"yyyy-MM-WW";
  373. self.style = BRDatePickerStyleCustom;
  374. self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getWeekUnit]];
  375. }
  376. break;
  377. case BRDatePickerModeYW:
  378. {
  379. self.dateFormatter = @"yyyy-ww";
  380. self.style = BRDatePickerStyleCustom;
  381. self.unitArr = @[[self getYearUnit], [self getWeekUnit]];
  382. }
  383. break;
  384. case BRDatePickerModeYQ:
  385. {
  386. self.dateFormatter = @"yyyy-qq";
  387. self.style = BRDatePickerStyleCustom;
  388. self.unitArr = @[[self getYearUnit], [self getQuarterUnit]];
  389. }
  390. break;
  391. default:
  392. break;
  393. }
  394. }
  395. #pragma mark - 更新日期数据源数组
  396. - (void)reloadDateArrayWithUpdateMonth:(BOOL)updateMonth updateDay:(BOOL)updateDay updateHour:(BOOL)updateHour updateMinute:(BOOL)updateMinute updateSecond:(BOOL)updateSecond {
  397. [self reloadDateArrayWithUpdateMonth:updateMonth updateDay:updateDay updateHour:updateHour updateMinute:updateMinute updateSecond:NO updateWeekOfMonth:NO updateWeekOfYear:NO updateQuarter:NO];
  398. }
  399. - (void)reloadDateArrayWithUpdateMonth:(BOOL)updateMonth updateDay:(BOOL)updateDay updateHour:(BOOL)updateHour updateMinute:(BOOL)updateMinute updateSecond:(BOOL)updateSecond
  400. updateWeekOfMonth:(BOOL)updateWeekOfMonth updateWeekOfYear:(BOOL)updateWeekOfYear updateQuarter:(BOOL)updateQuarter {
  401. _isAdjustSelectRow = NO;
  402. // 1.更新 monthArr
  403. if (self.yearArr.count == 0) {
  404. return;
  405. }
  406. NSString *yearString = [self getYearString];
  407. if ((self.lastRowContent && [yearString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [yearString isEqualToString:self.firstRowContent])) {
  408. self.monthArr = nil;
  409. self.dayArr = nil;
  410. self.hourArr = nil;
  411. self.minuteArr = nil;
  412. self.secondArr = nil;
  413. self.monthWeekArr = nil;
  414. self.yearWeekArr = nil;
  415. self.quarterArr = nil;
  416. return;
  417. }
  418. if (updateMonth) {
  419. NSString *lastSelectMonth = [self getMDHMSNumber:self.mSelectDate.br_month];
  420. self.monthArr = [self getMonthArr:[yearString integerValue]];
  421. if (self.mSelectDate) {
  422. if ([self.monthArr containsObject:lastSelectMonth]) {
  423. NSInteger monthIndex = [self.monthArr indexOfObject:lastSelectMonth];
  424. if (monthIndex != self.monthIndex) {
  425. _isAdjustSelectRow = YES;
  426. self.monthIndex = monthIndex;
  427. }
  428. } else {
  429. _isAdjustSelectRow = YES;
  430. self.monthIndex = ([lastSelectMonth intValue] < [self.monthArr.firstObject intValue]) ? 0 : (self.monthArr.count - 1);
  431. }
  432. }
  433. }
  434. // 1/1.更新 yearWeekArr
  435. if (updateWeekOfYear) {
  436. NSString *lastSelectWeekOfYear = [self getMDHMSNumber:self.mSelectDate.br_yearWeek];
  437. self.yearWeekArr = [self getYearWeekArr:[yearString integerValue]];
  438. if (self.mSelectDate) {
  439. if ([self.yearWeekArr containsObject:lastSelectWeekOfYear]) {
  440. NSInteger yearWeekIndex = [self.yearWeekArr indexOfObject:lastSelectWeekOfYear];
  441. if (yearWeekIndex != self.yearWeekIndex) {
  442. _isAdjustSelectRow = YES;
  443. self.monthIndex = yearWeekIndex;
  444. }
  445. } else {
  446. _isAdjustSelectRow = YES;
  447. self.yearWeekIndex = ([lastSelectWeekOfYear intValue] < [self.yearWeekArr.firstObject intValue]) ? 0 : (self.yearWeekArr.count - 1);
  448. }
  449. }
  450. }
  451. // 1/1.更新 quarterArr
  452. if (updateQuarter) {
  453. NSString *lastSelectQuarter = [self getMDHMSNumber:self.mSelectDate.br_quarter];
  454. self.quarterArr = [self getQuarterArr:[yearString integerValue]];
  455. if (self.mSelectDate) {
  456. if ([self.quarterArr containsObject:lastSelectQuarter]) {
  457. NSInteger quarterIndex = [self.quarterArr indexOfObject:lastSelectQuarter];
  458. if (quarterIndex != self.quarterIndex) {
  459. _isAdjustSelectRow = YES;
  460. self.quarterIndex = quarterIndex;
  461. }
  462. } else {
  463. _isAdjustSelectRow = YES;
  464. self.quarterIndex = ([lastSelectQuarter intValue] < [self.quarterArr.firstObject intValue]) ? 0 : (self.quarterArr.count - 1);
  465. }
  466. }
  467. }
  468. // 2.更新 dayArr
  469. if (self.monthArr.count == 0) {
  470. return;
  471. }
  472. NSString *monthString = [self getMonthString];
  473. if ((self.lastRowContent && [monthString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [monthString isEqualToString:self.firstRowContent])) {
  474. self.dayArr = nil;
  475. self.hourArr = nil;
  476. self.minuteArr = nil;
  477. self.secondArr = nil;
  478. self.monthWeekArr = nil;
  479. return;
  480. }
  481. if (updateDay) {
  482. NSString *lastSelectDay = [self getMDHMSNumber:self.mSelectDate.br_day];
  483. self.dayArr = [self getDayArr:[yearString integerValue] month:[monthString integerValue]];
  484. if (self.mSelectDate) {
  485. if ([self.dayArr containsObject:lastSelectDay]) {
  486. NSInteger dayIndex = [self.dayArr indexOfObject:lastSelectDay];
  487. if (dayIndex != self.dayIndex) {
  488. _isAdjustSelectRow = YES;
  489. self.dayIndex = dayIndex;
  490. }
  491. } else {
  492. _isAdjustSelectRow = YES;
  493. self.dayIndex = ([lastSelectDay intValue] < [self.dayArr.firstObject intValue]) ? 0 : (self.dayArr.count - 1);
  494. }
  495. }
  496. }
  497. // 2/1.更新 monthWeekArr
  498. if (updateWeekOfMonth) {
  499. NSString *lastWeekOfMonth = [self getMDHMSNumber:self.mSelectDate.br_monthWeek];
  500. self.monthWeekArr = [self getMonthWeekArr:[yearString integerValue] month:[monthString integerValue]];
  501. if (self.mSelectDate) {
  502. if ([self.monthWeekArr containsObject:lastWeekOfMonth]) {
  503. NSInteger monthWeekIndex = [self.monthWeekArr indexOfObject:lastWeekOfMonth];
  504. if (monthWeekIndex != self.monthWeekIndex) {
  505. _isAdjustSelectRow = YES;
  506. self.monthWeekIndex = monthWeekIndex;
  507. }
  508. } else {
  509. _isAdjustSelectRow = YES;
  510. self.monthWeekIndex = ([lastWeekOfMonth intValue] < [self.monthWeekArr.firstObject intValue]) ? 0 : (self.monthWeekArr.count - 1);
  511. }
  512. }
  513. }
  514. // 3.更新 hourArr
  515. if (self.dayArr.count == 0) {
  516. return;
  517. }
  518. NSInteger day = [[self getDayString] integerValue];
  519. if (updateHour) {
  520. NSString *lastSelectHour = [self getMDHMSNumber:self.mSelectDate.br_hour];
  521. self.hourArr = [self getHourArr:[yearString integerValue] month:[monthString integerValue] day:day];
  522. if (self.mSelectDate) {
  523. if ([self.hourArr containsObject:lastSelectHour]) {
  524. NSInteger hourIndex = [self.hourArr indexOfObject:lastSelectHour];
  525. if (hourIndex != self.hourIndex) {
  526. _isAdjustSelectRow = YES;
  527. self.hourIndex = hourIndex;
  528. }
  529. } else {
  530. _isAdjustSelectRow = YES;
  531. self.hourIndex = ([lastSelectHour intValue] < [self.hourArr.firstObject intValue]) ? 0 : (self.hourArr.count - 1);
  532. }
  533. }
  534. }
  535. // 4.更新 minuteArr
  536. if (self.hourArr.count == 0) {
  537. return;
  538. }
  539. NSString *hourString = [self getHourString];
  540. if ((self.lastRowContent && [hourString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [hourString isEqualToString:self.firstRowContent])) {
  541. self.minuteArr = nil;
  542. self.secondArr = nil;
  543. return;
  544. }
  545. if (updateMinute) {
  546. NSString *lastSelectMinute = [self getMDHMSNumber:self.mSelectDate.br_minute];
  547. self.minuteArr = [self getMinuteArr:[yearString integerValue] month:[monthString integerValue] day:day hour:[hourString integerValue]];
  548. if (self.mSelectDate) {
  549. if ([self.minuteArr containsObject:lastSelectMinute]) {
  550. NSInteger minuteIndex = [self.minuteArr indexOfObject:lastSelectMinute];
  551. if (minuteIndex != self.minuteIndex) {
  552. _isAdjustSelectRow = YES;
  553. self.minuteIndex = minuteIndex;
  554. }
  555. } else {
  556. _isAdjustSelectRow = YES;
  557. self.minuteIndex = ([lastSelectMinute intValue] < [self.minuteArr.firstObject intValue]) ? 0 : (self.minuteArr.count - 1);
  558. }
  559. }
  560. }
  561. // 5.更新 secondArr
  562. if (self.minuteArr.count == 0) {
  563. return;
  564. }
  565. NSString *minuteString = [self getMinuteString];
  566. if ((self.lastRowContent && [minuteString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [minuteString isEqualToString:self.firstRowContent])) {
  567. self.secondArr = nil;
  568. return;
  569. }
  570. if (updateSecond) {
  571. NSString *lastSelectSecond = [self getMDHMSNumber:self.mSelectDate.br_second];
  572. self.secondArr = [self getSecondArr:[yearString integerValue] month:[monthString integerValue] day:day hour:[hourString integerValue] minute:[minuteString integerValue]];
  573. if (self.mSelectDate) {
  574. if ([self.secondArr containsObject:lastSelectSecond]) {
  575. NSInteger secondIndex = [self.secondArr indexOfObject:lastSelectSecond];
  576. if (secondIndex != self.secondIndex) {
  577. _isAdjustSelectRow = YES;
  578. self.secondIndex = secondIndex;
  579. }
  580. } else {
  581. _isAdjustSelectRow = YES;
  582. self.secondIndex = ([lastSelectSecond intValue] < [self.secondArr.firstObject intValue]) ? 0 : (self.secondArr.count - 1);
  583. }
  584. }
  585. }
  586. }
  587. #pragma mark - 滚动到指定日期的位置(更新选择的索引)
  588. - (void)scrollToSelectDate:(NSDate *)selectDate animated:(BOOL)animated {
  589. self.yearIndex = [self getIndexWithArray:self.yearArr object:[self getYearNumber:selectDate.br_year]];
  590. self.monthIndex = [self getIndexWithArray:self.monthArr object:[self getMDHMSNumber:selectDate.br_month]];
  591. self.dayIndex = [self getIndexWithArray:self.dayArr object:[self getMDHMSNumber:selectDate.br_day]];
  592. if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) {
  593. self.hourIndex = selectDate.br_hour < 12 ? 0 : 1;
  594. } else {
  595. self.hourIndex = [self getIndexWithArray:self.hourArr object:[self getMDHMSNumber:selectDate.br_hour]];
  596. }
  597. self.minuteIndex = [self getIndexWithArray:self.minuteArr object:[self getMDHMSNumber:selectDate.br_minute]];
  598. self.secondIndex = [self getIndexWithArray:self.secondArr object:[self getMDHMSNumber:selectDate.br_second]];
  599. NSArray *indexArr = nil;
  600. if (self.pickerMode == BRDatePickerModeYMDHMS) {
  601. indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex), @(self.hourIndex), @(self.minuteIndex), @(self.secondIndex)];
  602. } else if (self.pickerMode == BRDatePickerModeYMDHM) {
  603. indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex), @(self.hourIndex), @(self.minuteIndex)];
  604. } else if (self.pickerMode == BRDatePickerModeYMDH) {
  605. indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex), @(self.hourIndex)];
  606. } else if (self.pickerMode == BRDatePickerModeMDHM) {
  607. indexArr = @[@(self.monthIndex), @(self.dayIndex), @(self.hourIndex), @(self.minuteIndex)];
  608. } else if (self.pickerMode == BRDatePickerModeYMD) {
  609. if ([self.pickerStyle.language hasPrefix:@"zh"]) {
  610. indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex)];
  611. } else {
  612. indexArr = @[@(self.dayIndex), @(self.monthIndex), @(self.yearIndex)];
  613. }
  614. } else if (self.pickerMode == BRDatePickerModeYM) {
  615. if ([self.pickerStyle.language hasPrefix:@"zh"]) {
  616. indexArr = @[@(self.yearIndex), @(self.monthIndex)];
  617. } else {
  618. indexArr = @[@(self.monthIndex), @(self.yearIndex)];
  619. }
  620. } else if (self.pickerMode == BRDatePickerModeY) {
  621. indexArr = @[@(self.yearIndex)];
  622. } else if (self.pickerMode == BRDatePickerModeMD) {
  623. indexArr = @[@(self.monthIndex), @(self.dayIndex)];
  624. } else if (self.pickerMode == BRDatePickerModeHMS) {
  625. indexArr = @[@(self.hourIndex), @(self.minuteIndex), @(self.secondIndex)];
  626. } else if (self.pickerMode == BRDatePickerModeHM) {
  627. indexArr = @[@(self.hourIndex), @(self.minuteIndex)];
  628. } else if (self.pickerMode == BRDatePickerModeMS) {
  629. indexArr = @[@(self.minuteIndex), @(self.secondIndex)];
  630. } else if (self.pickerMode == BRDatePickerModeYMW) {
  631. indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.monthWeekIndex)];
  632. } else if (self.pickerMode == BRDatePickerModeYW) {
  633. indexArr = @[@(self.yearIndex), @(self.yearWeekIndex)];
  634. } else if (self.pickerMode == BRDatePickerModeYQ) {
  635. indexArr = @[@(self.yearIndex), @(self.quarterIndex)];
  636. }
  637. if (!indexArr) return;
  638. for (NSInteger i = 0; i < indexArr.count; i++) {
  639. [self.pickerView selectRow:[indexArr[i] integerValue] inComponent:i animated:animated];
  640. }
  641. }
  642. #pragma mark - 滚动到【自定义字符串】的位置
  643. - (void)scrollToCustomString:(BOOL)animated {
  644. switch (self.pickerMode) {
  645. case BRDatePickerModeYMDHMS:
  646. case BRDatePickerModeYMDHM:
  647. case BRDatePickerModeYMDH:
  648. case BRDatePickerModeYMD:
  649. case BRDatePickerModeYM:
  650. case BRDatePickerModeY:
  651. case BRDatePickerModeYMW:
  652. case BRDatePickerModeYW:
  653. case BRDatePickerModeYQ:
  654. {
  655. NSInteger yearIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.yearArr.count > 0) ? self.yearArr.count - 1 : 0;
  656. NSInteger component = 0;
  657. if ((self.pickerMode == BRDatePickerModeYMD || self.pickerMode == BRDatePickerModeYMW) && ![self.pickerStyle.language hasPrefix:@"zh"]) {
  658. component = 2;
  659. } else if ((self.pickerMode == BRDatePickerModeYM || self.pickerMode == BRDatePickerModeYQ) && ![self.pickerStyle.language hasPrefix:@"zh"]) {
  660. component = 1;
  661. }
  662. [self.pickerView selectRow:yearIndex inComponent:component animated:animated];
  663. }
  664. break;
  665. case BRDatePickerModeMDHM:
  666. case BRDatePickerModeMD:
  667. {
  668. NSInteger monthIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.monthArr.count > 0) ? self.monthArr.count - 1 : 0;
  669. [self.pickerView selectRow:monthIndex inComponent:0 animated:animated];
  670. }
  671. break;
  672. case BRDatePickerModeHMS:
  673. case BRDatePickerModeHM:
  674. {
  675. NSInteger hourIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.hourArr.count > 0) ? self.hourArr.count - 1 : 0;
  676. [self.pickerView selectRow:hourIndex inComponent:0 animated:animated];
  677. }
  678. break;
  679. case BRDatePickerModeMS:
  680. {
  681. NSInteger minuteIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.minuteArr.count > 0) ? self.minuteArr.count - 1 : 0;
  682. [self.pickerView selectRow:minuteIndex inComponent:0 animated:animated];
  683. }
  684. break;
  685. default:
  686. break;
  687. }
  688. }
  689. #pragma mark - 日期选择器1
  690. - (UIDatePicker *)datePicker {
  691. if (!_datePicker) {
  692. CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
  693. _datePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight)];
  694. _datePicker.backgroundColor = self.pickerStyle.pickerColor;
  695. _datePicker.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
  696. // 滚动改变值的响应事件
  697. [_datePicker addTarget:self action:@selector(didSelectValueChanged:) forControlEvents:UIControlEventValueChanged];
  698. }
  699. return _datePicker;
  700. }
  701. #pragma mark - 日期选择器2
  702. - (UIPickerView *)pickerView {
  703. if (!_pickerView) {
  704. CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
  705. _pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight)];
  706. _pickerView.backgroundColor = self.pickerStyle.pickerColor;
  707. _pickerView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
  708. _pickerView.dataSource = self;
  709. _pickerView.delegate = self;
  710. }
  711. return _pickerView;
  712. }
  713. #pragma mark - UIPickerViewDataSource
  714. // 1.设置 pickerView 的列数
  715. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
  716. if (self.pickerMode == BRDatePickerModeYMDHMS) {
  717. return 6;
  718. } else if (self.pickerMode == BRDatePickerModeYMDHM) {
  719. return 5;
  720. } else if (self.pickerMode == BRDatePickerModeYMDH) {
  721. return 4;
  722. } else if (self.pickerMode == BRDatePickerModeMDHM) {
  723. return 4;
  724. } else if (self.pickerMode == BRDatePickerModeYMD) {
  725. return 3;
  726. } else if (self.pickerMode == BRDatePickerModeYM) {
  727. return 2;
  728. } else if (self.pickerMode == BRDatePickerModeY) {
  729. return 1;
  730. } else if (self.pickerMode == BRDatePickerModeMD) {
  731. return 2;
  732. } else if (self.pickerMode == BRDatePickerModeHMS) {
  733. return 3;
  734. } else if (self.pickerMode == BRDatePickerModeHM) {
  735. return 2;
  736. } else if (self.pickerMode == BRDatePickerModeMS) {
  737. return 2;
  738. } else if (self.pickerMode == BRDatePickerModeYMW) {
  739. return 3;
  740. } else if (self.pickerMode == BRDatePickerModeYW) {
  741. return 2;
  742. } else if (self.pickerMode == BRDatePickerModeYQ) {
  743. return 2;
  744. }
  745. return 0;
  746. }
  747. // 2.设置 pickerView 每列的行数
  748. - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
  749. NSArray *rowsArr = [NSArray array];
  750. if (self.pickerMode == BRDatePickerModeYMDHMS) {
  751. rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count), @(self.minuteArr.count), @(self.secondArr.count)];
  752. } else if (self.pickerMode == BRDatePickerModeYMDHM) {
  753. rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count), @(self.minuteArr.count)];
  754. } else if (self.pickerMode == BRDatePickerModeYMDH) {
  755. rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count)];
  756. } else if (self.pickerMode == BRDatePickerModeMDHM) {
  757. rowsArr = @[@(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count), @(self.minuteArr.count)];
  758. } else if (self.pickerMode == BRDatePickerModeYMD) {
  759. if ([self.pickerStyle.language hasPrefix:@"zh"]) {
  760. rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count)];
  761. } else {
  762. rowsArr = @[@(self.dayArr.count), @(self.monthArr.count), @(self.yearArr.count)];
  763. }
  764. } else if (self.pickerMode == BRDatePickerModeYM) {
  765. if ([self.pickerStyle.language hasPrefix:@"zh"]) {
  766. rowsArr = @[@(self.yearArr.count), @(self.monthArr.count)];
  767. } else {
  768. rowsArr = @[@(self.monthArr.count), @(self.yearArr.count)];
  769. }
  770. } else if (self.pickerMode == BRDatePickerModeY) {
  771. rowsArr = @[@(self.yearArr.count)];
  772. } else if (self.pickerMode == BRDatePickerModeMD) {
  773. rowsArr = @[@(self.monthArr.count), @(self.dayArr.count)];
  774. } else if (self.pickerMode == BRDatePickerModeHMS) {
  775. rowsArr = @[@(self.hourArr.count), @(self.minuteArr.count), @(self.secondArr.count)];
  776. } else if (self.pickerMode == BRDatePickerModeHM) {
  777. rowsArr = @[@(self.hourArr.count), @(self.minuteArr.count)];
  778. } else if (self.pickerMode == BRDatePickerModeMS) {
  779. rowsArr = @[@(self.minuteArr.count), @(self.secondArr.count)];
  780. } else if (self.pickerMode == BRDatePickerModeYMW) {
  781. rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.monthWeekArr.count)];
  782. } else if (self.pickerMode == BRDatePickerModeYW) {
  783. rowsArr = @[@(self.yearArr.count), @(self.yearWeekArr.count)];
  784. } else if (self.pickerMode == BRDatePickerModeYQ) {
  785. rowsArr = @[@(self.yearArr.count), @(self.quarterArr.count)];
  786. }
  787. if (component >= 0 && component < rowsArr.count) {
  788. return [rowsArr[component] integerValue];
  789. }
  790. return 0;
  791. }
  792. #pragma mark - UIPickerViewDelegate
  793. // 3. 设置 pickerView 的显示内容
  794. - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view {
  795. // 1.自定义 row 的内容视图
  796. UILabel *label = (UILabel *)view;
  797. if (!label) {
  798. label = [[UILabel alloc]init];
  799. label.backgroundColor = [UIColor clearColor];
  800. label.textAlignment = NSTextAlignmentCenter;
  801. label.font = self.pickerStyle.pickerTextFont;
  802. label.textColor = self.pickerStyle.pickerTextColor;
  803. // 字体自适应属性
  804. label.adjustsFontSizeToFitWidth = YES;
  805. // 自适应最小字体缩放比例
  806. label.minimumScaleFactor = 0.5f;
  807. }
  808. label.text = [self pickerView:pickerView titleForRow:row forComponent:component];
  809. // 2.设置选择器中间选中行的样式
  810. [self.pickerStyle setupPickerSelectRowStyle:pickerView titleForRow:row forComponent:component];
  811. return label;
  812. }
  813. - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
  814. NSString *titleString = @"";
  815. if (self.pickerMode == BRDatePickerModeYMDHMS) {
  816. if (component == 0) {
  817. titleString = [self getYearText:self.yearArr row:row];
  818. } else if (component == 1) {
  819. titleString = [self getMonthText:self.monthArr row:row];
  820. } else if (component == 2) {
  821. titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
  822. } else if (component == 3) {
  823. titleString = [self getHourText:self.hourArr row:row];
  824. } else if (component == 4) {
  825. titleString = [self getMinuteText:self.minuteArr row:row];
  826. } else if (component == 5) {
  827. titleString = [self getSecondText:self.secondArr row:row];
  828. }
  829. } else if (self.pickerMode == BRDatePickerModeYMDHM) {
  830. if (component == 0) {
  831. titleString = [self getYearText:self.yearArr row:row];
  832. } else if (component == 1) {
  833. titleString = [self getMonthText:self.monthArr row:row];
  834. } else if (component == 2) {
  835. titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
  836. } else if (component == 3) {
  837. titleString = [self getHourText:self.hourArr row:row];
  838. } else if (component == 4) {
  839. titleString = [self getMinuteText:self.minuteArr row:row];
  840. }
  841. } else if (self.pickerMode == BRDatePickerModeYMDH) {
  842. if (component == 0) {
  843. titleString = [self getYearText:self.yearArr row:row];;
  844. } else if (component == 1) {
  845. titleString = [self getMonthText:self.monthArr row:row];
  846. } else if (component == 2) {
  847. titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
  848. } else if (component == 3) {
  849. titleString = [self getHourText:self.hourArr row:row];
  850. }
  851. } else if (self.pickerMode == BRDatePickerModeMDHM) {
  852. if (component == 0) {
  853. titleString = [self getMonthText:self.monthArr row:row];
  854. } else if (component == 1) {
  855. titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
  856. } else if (component == 2) {
  857. titleString = [self getHourText:self.hourArr row:row];
  858. } else if (component == 3) {
  859. titleString = [self getMinuteText:self.minuteArr row:row];
  860. }
  861. } else if (self.pickerMode == BRDatePickerModeYMD) {
  862. if (component == 0) {
  863. titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getYearText:self.yearArr row:row] : [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
  864. } else if (component == 1) {
  865. titleString = [self getMonthText:self.monthArr row:row];
  866. } else if (component == 2) {
  867. titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate] : [self getYearText:self.yearArr row:row];
  868. }
  869. } else if (self.pickerMode == BRDatePickerModeYM) {
  870. if (component == 0) {
  871. titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getYearText:self.yearArr row:row] : [self getMonthText:self.monthArr row:row];
  872. } else if (component == 1) {
  873. titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getMonthText:self.monthArr row:row] : [self getYearText:self.yearArr row:row];
  874. }
  875. } else if (self.pickerMode == BRDatePickerModeY) {
  876. if (component == 0) {
  877. titleString = [self getYearText:self.yearArr row:row];
  878. }
  879. } else if (self.pickerMode == BRDatePickerModeMD) {
  880. if (component == 0) {
  881. titleString = [self getMonthText:self.monthArr row:row];
  882. } else if (component == 1) {
  883. titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
  884. }
  885. } else if (self.pickerMode == BRDatePickerModeHMS) {
  886. if (component == 0) {
  887. titleString = [self getHourText:self.hourArr row:row];
  888. } else if (component == 1) {
  889. titleString = [self getMinuteText:self.minuteArr row:row];
  890. } else if (component == 2) {
  891. titleString = [self getSecondText:self.secondArr row:row];
  892. }
  893. } else if (self.pickerMode == BRDatePickerModeHM) {
  894. if (component == 0) {
  895. titleString = [self getHourText:self.hourArr row:row];
  896. } else if (component == 1) {
  897. titleString = [self getMinuteText:self.minuteArr row:row];
  898. }
  899. } else if (self.pickerMode == BRDatePickerModeMS) {
  900. if (component == 0) {
  901. titleString = [self getMinuteText:self.minuteArr row:row];
  902. } else if (component == 1) {
  903. titleString = [self getSecondText:self.secondArr row:row];
  904. }
  905. } else if (self.pickerMode == BRDatePickerModeYMW) {
  906. if (component == 0) {
  907. titleString = [self getYearText:self.yearArr row:row];
  908. } else if (component == 1) {
  909. titleString = [self getMonthText:self.monthArr row:row];
  910. } else if (component == 2) {
  911. titleString = [self getWeekText:self.monthWeekArr row:row];
  912. }
  913. } else if (self.pickerMode == BRDatePickerModeYW) {
  914. if (component == 0) {
  915. titleString = [self getYearText:self.yearArr row:row];
  916. } else if (component == 1) {
  917. titleString = [self getWeekText:self.yearWeekArr row:row];
  918. }
  919. } else if (self.pickerMode == BRDatePickerModeYQ) {
  920. if (component == 0) {
  921. titleString = [self getYearText:self.yearArr row:row];
  922. } else if (component == 1) {
  923. titleString = [self getQuarterText:self.quarterArr row:row];
  924. }
  925. }
  926. return titleString;
  927. }
  928. // 4.滚动 pickerView 执行的回调方法
  929. - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
  930. NSString *lastSelectValue = self.mSelectValue;
  931. NSDate *lastSelectDate = self.mSelectDate;
  932. if (self.pickerMode == BRDatePickerModeYMDHMS) {
  933. if (component == 0) {
  934. self.yearIndex = row;
  935. [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:YES updateMinute:YES updateSecond:YES];
  936. [self.pickerView reloadComponent:1];
  937. [self.pickerView reloadComponent:2];
  938. [self.pickerView reloadComponent:3];
  939. [self.pickerView reloadComponent:4];
  940. [self.pickerView reloadComponent:5];
  941. } else if (component == 1) {
  942. self.monthIndex = row;
  943. [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:YES updateSecond:YES];
  944. [self.pickerView reloadComponent:2];
  945. [self.pickerView reloadComponent:3];
  946. [self.pickerView reloadComponent:4];
  947. [self.pickerView reloadComponent:5];
  948. } else if (component == 2) {
  949. self.dayIndex = row;
  950. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:YES updateSecond:YES];
  951. [self.pickerView reloadComponent:3];
  952. [self.pickerView reloadComponent:4];
  953. [self.pickerView reloadComponent:5];
  954. } else if (component == 3) {
  955. self.hourIndex = row;
  956. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:YES];
  957. [self.pickerView reloadComponent:4];
  958. [self.pickerView reloadComponent:5];
  959. } else if (component == 4) {
  960. self.minuteIndex = row;
  961. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:YES];
  962. [self.pickerView reloadComponent:5];
  963. } else if (component == 5) {
  964. self.secondIndex = row;
  965. }
  966. NSString *yearString = [self getYearString];
  967. if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
  968. if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count * self.minuteArr.count * self.secondArr.count == 0) return;
  969. int year = [[self getYearString] intValue];
  970. int month = [[self getMonthString] intValue];
  971. int day = [[self getDayString] intValue];
  972. int hour = [[self getHourString] intValue];
  973. int minute = [[self getMinuteString] intValue];
  974. int second = [[self getSecondString] intValue];
  975. self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour minute:minute second:second];
  976. self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second];
  977. } else {
  978. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  979. if ([yearString isEqualToString:self.lastRowContent]) {
  980. self.mSelectValue = self.lastRowContent;
  981. } else if ([yearString isEqualToString:self.firstRowContent]) {
  982. self.mSelectValue = self.firstRowContent;
  983. }
  984. }
  985. } else if (self.pickerMode == BRDatePickerModeYMDHM) {
  986. if (component == 0) {
  987. self.yearIndex = row;
  988. [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:YES updateMinute:YES updateSecond:NO];
  989. [self.pickerView reloadComponent:1];
  990. [self.pickerView reloadComponent:2];
  991. [self.pickerView reloadComponent:3];
  992. [self.pickerView reloadComponent:4];
  993. } else if (component == 1) {
  994. self.monthIndex = row;
  995. [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:YES updateSecond:NO];
  996. [self.pickerView reloadComponent:2];
  997. [self.pickerView reloadComponent:3];
  998. [self.pickerView reloadComponent:4];
  999. } else if (component == 2) {
  1000. self.dayIndex = row;
  1001. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:YES updateSecond:NO];
  1002. [self.pickerView reloadComponent:3];
  1003. [self.pickerView reloadComponent:4];
  1004. } else if (component == 3) {
  1005. self.hourIndex = row;
  1006. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:NO];
  1007. [self.pickerView reloadComponent:4];
  1008. } else if (component == 4) {
  1009. self.minuteIndex = row;
  1010. }
  1011. NSString *yearString = [self getYearString];
  1012. if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
  1013. if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count * self.minuteArr.count == 0) return;
  1014. int year = [[self getYearString] intValue];
  1015. int month = [[self getMonthString] intValue];
  1016. int day = [[self getDayString] intValue];
  1017. int hour = [[self getHourString] intValue];
  1018. int minute = [[self getMinuteString] intValue];
  1019. self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour minute:minute];
  1020. self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d", year, month, day, hour, minute];
  1021. } else {
  1022. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1023. if ([yearString isEqualToString:self.lastRowContent]) {
  1024. self.mSelectValue = self.lastRowContent;
  1025. } else if ([yearString isEqualToString:self.firstRowContent]) {
  1026. self.mSelectValue = self.firstRowContent;
  1027. }
  1028. }
  1029. } else if (self.pickerMode == BRDatePickerModeYMDH) {
  1030. if (component == 0) {
  1031. self.yearIndex = row;
  1032. [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:YES updateMinute:NO updateSecond:NO];
  1033. [self.pickerView reloadComponent:1];
  1034. [self.pickerView reloadComponent:2];
  1035. [self.pickerView reloadComponent:3];
  1036. } else if (component == 1) {
  1037. self.monthIndex = row;
  1038. [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:NO updateSecond:NO];
  1039. [self.pickerView reloadComponent:2];
  1040. [self.pickerView reloadComponent:3];
  1041. } else if (component == 2) {
  1042. self.dayIndex = row;
  1043. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:NO updateSecond:NO];
  1044. [self.pickerView reloadComponent:3];
  1045. } else if (component == 3) {
  1046. self.hourIndex = row;
  1047. }
  1048. NSString *yearString = [self getYearString];
  1049. if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
  1050. if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count == 0) return;
  1051. int year = [[self getYearString] intValue];
  1052. int month = [[self getMonthString] intValue];
  1053. int day = [[self getDayString] intValue];
  1054. int hour = 0;
  1055. if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) {
  1056. hour = (self.hourIndex == 0 ? 0 : 12);
  1057. self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %@", year, month, day, [self getHourString]];
  1058. } else {
  1059. hour = [[self getHourString] intValue];
  1060. self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %02d", year, month, day, hour];
  1061. }
  1062. self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour];
  1063. } else {
  1064. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1065. if ([yearString isEqualToString:self.lastRowContent]) {
  1066. self.mSelectValue = self.lastRowContent;
  1067. } else if ([yearString isEqualToString:self.firstRowContent]) {
  1068. self.mSelectValue = self.firstRowContent;
  1069. }
  1070. }
  1071. } else if (self.pickerMode == BRDatePickerModeMDHM) {
  1072. if (component == 0) {
  1073. self.monthIndex = row;
  1074. [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:YES updateSecond:NO];
  1075. [self.pickerView reloadComponent:1];
  1076. [self.pickerView reloadComponent:2];
  1077. [self.pickerView reloadComponent:3];
  1078. } else if (component == 1) {
  1079. self.dayIndex = row;
  1080. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:YES updateSecond:NO];
  1081. [self.pickerView reloadComponent:2];
  1082. [self.pickerView reloadComponent:3];
  1083. } else if (component == 2) {
  1084. self.hourIndex = row;
  1085. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:NO];
  1086. [self.pickerView reloadComponent:3];
  1087. } else if (component == 3) {
  1088. self.minuteIndex = row;
  1089. }
  1090. NSString *monthString = [self getMonthString];
  1091. if (![monthString isEqualToString:self.lastRowContent] && ![monthString isEqualToString:self.firstRowContent]) {
  1092. if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count * self.minuteArr.count == 0) return;
  1093. int year = [[self getYearString] intValue];
  1094. int month = [[self getMonthString] intValue];
  1095. int day = [[self getDayString] intValue];
  1096. int hour = [[self getHourString] intValue];
  1097. int minute = [[self getMinuteString] intValue];
  1098. self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour minute:minute];
  1099. self.mSelectValue = [NSString stringWithFormat:@"%02d-%02d %02d:%02d", month, day, hour, minute];
  1100. } else {
  1101. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1102. if ([monthString isEqualToString:self.lastRowContent]) {
  1103. self.mSelectValue = self.lastRowContent;
  1104. } else if ([monthString isEqualToString:self.firstRowContent]) {
  1105. self.mSelectValue = self.firstRowContent;
  1106. }
  1107. }
  1108. } else if (self.pickerMode == BRDatePickerModeYMD) {
  1109. if (component == 0) {
  1110. if ([self.pickerStyle.language hasPrefix:@"zh"]) {
  1111. self.yearIndex = row;
  1112. [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO];
  1113. [self.pickerView reloadComponent:1];
  1114. [self.pickerView reloadComponent:2];
  1115. } else {
  1116. self.dayIndex = row;
  1117. }
  1118. } else if (component == 1) {
  1119. self.monthIndex = row;
  1120. [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO];
  1121. if ([self.pickerStyle.language hasPrefix:@"zh"]) {
  1122. [self.pickerView reloadComponent:2];
  1123. } else {
  1124. [self.pickerView reloadComponent:0];
  1125. }
  1126. } else if (component == 2) {
  1127. if ([self.pickerStyle.language hasPrefix:@"zh"]) {
  1128. self.dayIndex = row;
  1129. } else {
  1130. self.yearIndex = row;
  1131. [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO];
  1132. [self.pickerView reloadComponent:0];
  1133. [self.pickerView reloadComponent:1];
  1134. }
  1135. }
  1136. NSString *yearString = [self getYearString];
  1137. if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
  1138. if (self.yearArr.count * self.monthArr.count * self.dayArr.count == 0) return;
  1139. int year = [[self getYearString] intValue];
  1140. int month = [[self getMonthString] intValue];
  1141. int day = [[self getDayString] intValue];
  1142. self.mSelectDate = [NSDate br_setYear:year month:month day:day];
  1143. self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d", year, month, day];
  1144. } else {
  1145. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1146. if ([yearString isEqualToString:self.lastRowContent]) {
  1147. self.mSelectValue = self.lastRowContent;
  1148. } else if ([yearString isEqualToString:self.firstRowContent]) {
  1149. self.mSelectValue = self.firstRowContent;
  1150. }
  1151. }
  1152. } else if (self.pickerMode == BRDatePickerModeYM) {
  1153. if (component == 0) {
  1154. if ([self.pickerStyle.language hasPrefix:@"zh"]) {
  1155. self.yearIndex = row;
  1156. [self reloadDateArrayWithUpdateMonth:YES updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO];
  1157. [self.pickerView reloadComponent:1];
  1158. } else {
  1159. self.monthIndex = row;
  1160. }
  1161. } else if (component == 1) {
  1162. if ([self.pickerStyle.language hasPrefix:@"zh"]) {
  1163. self.monthIndex = row;
  1164. } else {
  1165. self.yearIndex = row;
  1166. [self reloadDateArrayWithUpdateMonth:YES updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO];
  1167. [self.pickerView reloadComponent:0];
  1168. }
  1169. }
  1170. NSString *yearString = [self getYearString];
  1171. if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
  1172. if (self.yearArr.count * self.monthArr.count == 0) return;
  1173. int year = [[self getYearString] intValue];
  1174. int month = [[self getMonthString] intValue];
  1175. self.mSelectDate = [NSDate br_setYear:year month:month];
  1176. self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d", year, month];
  1177. } else {
  1178. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1179. if ([yearString isEqualToString:self.lastRowContent]) {
  1180. self.mSelectValue = self.lastRowContent;
  1181. } else if ([yearString isEqualToString:self.firstRowContent]) {
  1182. self.mSelectValue = self.firstRowContent;
  1183. }
  1184. }
  1185. } else if (self.pickerMode == BRDatePickerModeY) {
  1186. if (component == 0) {
  1187. self.yearIndex = row;
  1188. }
  1189. NSString *yearString = [self getYearString];
  1190. if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
  1191. if (self.yearArr.count == 0) return;
  1192. int year = [[self getYearString] intValue];
  1193. self.mSelectDate = [NSDate br_setYear:year];
  1194. self.mSelectValue = [NSString stringWithFormat:@"%04d", year];
  1195. } else {
  1196. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1197. if ([yearString isEqualToString:self.lastRowContent]) {
  1198. self.mSelectValue = self.lastRowContent;
  1199. } else if ([yearString isEqualToString:self.firstRowContent]) {
  1200. self.mSelectValue = self.firstRowContent;
  1201. }
  1202. }
  1203. } else if (self.pickerMode == BRDatePickerModeMD) {
  1204. if (component == 0) {
  1205. self.monthIndex = row;
  1206. [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO];
  1207. [self.pickerView reloadComponent:1];
  1208. } else if (component == 1) {
  1209. self.dayIndex = row;
  1210. }
  1211. NSString *monthString = [self getMonthString];
  1212. if (![monthString isEqualToString:self.lastRowContent] && ![monthString isEqualToString:self.firstRowContent]) {
  1213. if (self.yearArr.count * self.monthArr.count * self.dayArr.count == 0) return;
  1214. int year = [[self getYearString] intValue];
  1215. int month = [[self getMonthString] intValue];
  1216. int day = [[self getDayString] intValue];
  1217. self.mSelectDate = [NSDate br_setYear:year month:month day:day];
  1218. self.mSelectValue = [NSString stringWithFormat:@"%02d-%02d", month, day];
  1219. } else {
  1220. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1221. if ([monthString isEqualToString:self.lastRowContent]) {
  1222. self.mSelectValue = self.lastRowContent;
  1223. } else if ([monthString isEqualToString:self.firstRowContent]) {
  1224. self.mSelectValue = self.firstRowContent;
  1225. }
  1226. }
  1227. } else if (self.pickerMode == BRDatePickerModeHMS) {
  1228. if (component == 0) {
  1229. self.hourIndex = row;
  1230. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:YES];
  1231. [self.pickerView reloadComponent:1];
  1232. [self.pickerView reloadComponent:2];
  1233. } else if (component == 1) {
  1234. self.minuteIndex = row;
  1235. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:YES];
  1236. [self.pickerView reloadComponent:2];
  1237. } else if (component == 2) {
  1238. self.secondIndex = row;
  1239. }
  1240. NSString *hourString = [self getHourString];
  1241. if (![hourString isEqualToString:self.lastRowContent] && ![hourString isEqualToString:self.firstRowContent]) {
  1242. if (self.hourArr.count * self.minuteArr.count * self.secondArr.count == 0) return;
  1243. int hour = [[self getHourString] intValue];
  1244. int minute = [[self getMinuteString] intValue];
  1245. int second = [[self getSecondString] intValue];
  1246. self.mSelectDate = [NSDate br_setHour:hour minute:minute second:second];
  1247. self.mSelectValue = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, minute, second];
  1248. } else {
  1249. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1250. if ([hourString isEqualToString:self.lastRowContent]) {
  1251. self.mSelectValue = self.lastRowContent;
  1252. } else if ([hourString isEqualToString:self.firstRowContent]) {
  1253. self.mSelectValue = self.firstRowContent;
  1254. }
  1255. }
  1256. } else if (self.pickerMode == BRDatePickerModeHM) {
  1257. if (component == 0) {
  1258. self.hourIndex = row;
  1259. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:NO];
  1260. [self.pickerView reloadComponent:1];
  1261. } else if (component == 1) {
  1262. self.minuteIndex = row;
  1263. }
  1264. NSString *hourString = [self getHourString];
  1265. if (![hourString isEqualToString:self.lastRowContent] && ![hourString isEqualToString:self.firstRowContent]) {
  1266. if (self.hourArr.count * self.minuteArr.count == 0) return;
  1267. int hour = [[self getHourString] intValue];
  1268. int minute = [[self getMinuteString] intValue];
  1269. self.mSelectDate = [NSDate br_setHour:hour minute:minute];
  1270. self.mSelectValue = [NSString stringWithFormat:@"%02d:%02d", hour, minute];
  1271. } else {
  1272. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1273. if ([hourString isEqualToString:self.lastRowContent]) {
  1274. self.mSelectValue = self.lastRowContent;
  1275. } else if ([hourString isEqualToString:self.firstRowContent]) {
  1276. self.mSelectValue = self.firstRowContent;
  1277. }
  1278. }
  1279. } else if (self.pickerMode == BRDatePickerModeMS) {
  1280. if (component == 0) {
  1281. self.minuteIndex = row;
  1282. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:YES];
  1283. [self.pickerView reloadComponent:1];
  1284. } else if (component == 1) {
  1285. self.secondIndex = row;
  1286. }
  1287. NSString *minuteString = [self getMinuteString];
  1288. if (![minuteString isEqualToString:self.lastRowContent] && ![minuteString isEqualToString:self.firstRowContent]) {
  1289. if (self.minuteArr.count * self.secondArr.count == 0) return;
  1290. int minute = [[self getMinuteString] intValue];
  1291. int second = [[self getSecondString] intValue];
  1292. self.mSelectDate = [NSDate br_setMinute:minute second:second];
  1293. self.mSelectValue = [NSString stringWithFormat:@"%02d:%02d", minute, second];
  1294. } else {
  1295. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1296. if ([minuteString isEqualToString:self.lastRowContent]) {
  1297. self.mSelectValue = self.lastRowContent;
  1298. } else if ([minuteString isEqualToString:self.firstRowContent]) {
  1299. self.mSelectValue = self.firstRowContent;
  1300. }
  1301. }
  1302. } else if (self.pickerMode == BRDatePickerModeYMW) {
  1303. if (component == 0) {
  1304. self.yearIndex = row;
  1305. [self reloadDateArrayWithUpdateMonth:YES updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO updateWeekOfMonth:YES updateWeekOfYear:NO updateQuarter:NO];
  1306. [self.pickerView reloadComponent:1];
  1307. [self.pickerView reloadComponent:2];
  1308. } else if (component == 1) {
  1309. self.monthIndex = row;
  1310. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO updateWeekOfMonth:YES updateWeekOfYear:NO updateQuarter:NO];
  1311. [self.pickerView reloadComponent:2];
  1312. } else if (component == 2) {
  1313. self.monthWeekIndex = row;
  1314. }
  1315. NSString *yearString = [self getYearString];
  1316. if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
  1317. if (self.yearArr.count * self.monthArr.count * self.monthWeekArr.count == 0) return;
  1318. int year = [[self getYearString] intValue];
  1319. int month = [[self getMonthString] intValue];
  1320. int week = [[self getMonthWeekString] intValue];
  1321. self.mSelectDate = [NSDate br_setYear:year month:month weekOfMonth:week];
  1322. self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d", year, month, week];
  1323. } else {
  1324. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1325. if ([yearString isEqualToString:self.lastRowContent]) {
  1326. self.mSelectValue = self.lastRowContent;
  1327. } else if ([yearString isEqualToString:self.firstRowContent]) {
  1328. self.mSelectValue = self.firstRowContent;
  1329. }
  1330. }
  1331. } else if (self.pickerMode == BRDatePickerModeYW) {
  1332. if (component == 0) {
  1333. self.yearIndex = row;
  1334. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO updateWeekOfMonth:NO updateWeekOfYear:YES updateQuarter:NO];
  1335. [self.pickerView reloadComponent:1];
  1336. } else if (component == 1) {
  1337. self.yearWeekIndex = row;
  1338. }
  1339. NSString *yearString = [self getYearString];
  1340. if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
  1341. if (self.yearArr.count * self.monthArr.count * self.monthWeekArr.count == 0) return;
  1342. int year = [[self getYearString] intValue];
  1343. int week = [[self getYearWeekString] intValue];
  1344. self.mSelectDate = [NSDate br_setYear:year weekOfYear:week];
  1345. self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d", year, week];
  1346. } else {
  1347. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1348. if ([yearString isEqualToString:self.lastRowContent]) {
  1349. self.mSelectValue = self.lastRowContent;
  1350. } else if ([yearString isEqualToString:self.firstRowContent]) {
  1351. self.mSelectValue = self.firstRowContent;
  1352. }
  1353. }
  1354. } else if (self.pickerMode == BRDatePickerModeYQ) {
  1355. if (component == 0) {
  1356. self.yearIndex = row;
  1357. [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO updateWeekOfMonth:NO updateWeekOfYear:NO updateQuarter:YES];
  1358. [self.pickerView reloadComponent:1];
  1359. } else if (component == 1) {
  1360. self.quarterIndex = row;
  1361. }
  1362. NSString *yearString = [self getYearString];
  1363. if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
  1364. if (self.yearArr.count * self.monthArr.count * self.monthWeekArr.count == 0) return;
  1365. int year = [[self getYearString] intValue];
  1366. int quarter = [[self getQuarterString] intValue];
  1367. self.mSelectDate = [NSDate br_setYear:year quarter:quarter];
  1368. self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d", year, quarter];
  1369. } else {
  1370. self.mSelectDate = self.addToNow ? [NSDate date] : nil;
  1371. if ([yearString isEqualToString:self.lastRowContent]) {
  1372. self.mSelectValue = self.lastRowContent;
  1373. } else if ([yearString isEqualToString:self.firstRowContent]) {
  1374. self.mSelectValue = self.firstRowContent;
  1375. }
  1376. }
  1377. }
  1378. // 纠正选择日期(解决:由【自定义字符串】滚动到 其它日期时,或设置 minDate,日期联动不正确问题)
  1379. BOOL isLastRowContent = [lastSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.firstRowContent];
  1380. BOOL isFirstRowContent = [lastSelectValue isEqualToString:self.firstRowContent] && ![self.mSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.firstRowContent];
  1381. if (isLastRowContent || isFirstRowContent || _isAdjustSelectRow) {
  1382. [self scrollToSelectDate:self.mSelectDate animated:NO];
  1383. }
  1384. // 禁止选择日期:回滚到上次选择的日期
  1385. if (self.nonSelectableDates && self.nonSelectableDates.count > 0 && ![self.mSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.firstRowContent]) {
  1386. for (NSDate *date in self.nonSelectableDates) {
  1387. if ([self br_compareDate:date targetDate:self.mSelectDate dateFormat:self.dateFormatter] == NSOrderedSame) {
  1388. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  1389. // 如果当前的日期不可选择,就回滚到上次选择的日期
  1390. [self scrollToSelectDate:lastSelectDate animated:YES];
  1391. });
  1392. // 不可选择日期的回调
  1393. if (self.nonSelectableBlock) {
  1394. self.nonSelectableBlock(self.mSelectDate, self.mSelectValue);
  1395. }
  1396. self.mSelectDate = lastSelectDate;
  1397. self.mSelectValue = lastSelectValue;
  1398. break;
  1399. }
  1400. }
  1401. }
  1402. // 滚动选择时执行 changeBlock 回调
  1403. if (self.changeBlock) {
  1404. self.changeBlock(self.mSelectDate, self.mSelectValue);
  1405. }
  1406. // 滚动选择范围时执行 changeBlock 回调
  1407. if (self.changeRangeBlock) {
  1408. self.changeRangeBlock(self.getSelectRangeDate.firstObject, self.getSelectRangeDate.lastObject, self.mSelectValue);
  1409. }
  1410. // 设置自动选择时,滚动选择时就执行 resultBlock
  1411. if (self.isAutoSelect) {
  1412. // 滚动完成后,执行block回调
  1413. if (self.resultBlock) {
  1414. self.resultBlock(self.mSelectDate, self.mSelectValue);
  1415. }
  1416. if (self.resultRangeBlock) {
  1417. self.resultRangeBlock(self.getSelectRangeDate.firstObject, self.getSelectRangeDate.lastObject, self.mSelectValue);
  1418. }
  1419. }
  1420. }
  1421. // 设置行高
  1422. - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
  1423. return self.pickerStyle.rowHeight;
  1424. }
  1425. #pragma mark - 日期选择器1 滚动后的响应事件
  1426. - (void)didSelectValueChanged:(UIDatePicker *)sender {
  1427. // 读取日期:datePicker.date
  1428. self.mSelectDate = sender.date;
  1429. if (_datePickerMode != UIDatePickerModeCountDownTimer) {
  1430. BOOL selectLessThanMin = [self br_compareDate:self.mSelectDate targetDate:self.minDate dateFormat:self.dateFormatter] == NSOrderedAscending;
  1431. BOOL selectMoreThanMax = [self br_compareDate:self.mSelectDate targetDate:self.maxDate dateFormat:self.dateFormatter] == NSOrderedDescending;
  1432. if (selectLessThanMin) {
  1433. self.mSelectDate = self.minDate;
  1434. }
  1435. if (selectMoreThanMax) {
  1436. self.mSelectDate = self.maxDate;
  1437. }
  1438. }
  1439. [self.datePicker setDate:self.mSelectDate animated:YES];
  1440. self.mSelectValue = [self br_stringFromDate:self.mSelectDate dateFormat:self.dateFormatter];
  1441. // 滚动选择时执行 changeBlock 回调
  1442. if (self.changeBlock) {
  1443. self.changeBlock(self.mSelectDate, self.mSelectValue);
  1444. }
  1445. // 滚动选择范围时执行 changeBlock 回调
  1446. if (self.changeRangeBlock) {
  1447. self.changeRangeBlock(self.getSelectRangeDate.firstObject, self.getSelectRangeDate.lastObject, self.mSelectValue);
  1448. }
  1449. // 设置自动选择时,滚动选择时就执行 resultBlock
  1450. if (self.isAutoSelect) {
  1451. // 滚动完成后,执行block回调
  1452. if (self.resultBlock) {
  1453. self.resultBlock(self.mSelectDate, self.mSelectValue);
  1454. }
  1455. if (self.resultRangeBlock) {
  1456. self.resultRangeBlock(self.getSelectRangeDate.firstObject, self.getSelectRangeDate.lastObject, self.mSelectValue);
  1457. }
  1458. }
  1459. }
  1460. #pragma mark - 重写父类方法
  1461. - (void)reloadData {
  1462. // 1.处理数据源
  1463. [self handlerPickerData];
  1464. if (self.style == BRDatePickerStyleSystem) {
  1465. // 2.刷新选择器(重新设置相关值)
  1466. self.datePicker.datePickerMode = _datePickerMode;
  1467. #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130400 // 编译时检查SDK版本,iOS SDK 13.4 以后版本的处理
  1468. if (@available(iOS 13.4, *)) {
  1469. // 适配 iOS14 以后 UIDatePicker 的显示样式
  1470. self.datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
  1471. // 设置 datePicker 的 frame(在iOS14里,UIDatePicker 的 frame 赋值必须放在 datePickerMode 赋值之后, 否则 frame 不会生效)
  1472. CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
  1473. self.datePicker.frame = CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight);
  1474. } else
  1475. #endif
  1476. {
  1477. // Fallback on earlier versions
  1478. }
  1479. // 设置该 UIDatePicker 的国际化 Locale
  1480. self.datePicker.locale = [[NSLocale alloc]initWithLocaleIdentifier:self.pickerStyle.language];
  1481. if (self.timeZone) {
  1482. self.datePicker.timeZone = self.timeZone;
  1483. }
  1484. self.datePicker.calendar = self.calendar;
  1485. // 设置农历日期
  1486. //self.datePicker.calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierChinese];
  1487. if (self.minDate) {
  1488. self.datePicker.minimumDate = self.minDate;
  1489. }
  1490. if (self.maxDate) {
  1491. self.datePicker.maximumDate = self.maxDate;
  1492. }
  1493. if (_datePickerMode == UIDatePickerModeCountDownTimer && self.countDownDuration > 0) {
  1494. self.datePicker.countDownDuration = self.countDownDuration;
  1495. }
  1496. if (self.minuteInterval > 1) {
  1497. self.datePicker.minuteInterval = self.minuteInterval;
  1498. }
  1499. // 3.滚动到选择的日期
  1500. [self.datePicker setDate:self.mSelectDate animated:NO];
  1501. } else if (self.style == BRDatePickerStyleCustom) {
  1502. // 2.刷新选择器
  1503. [self.pickerView reloadAllComponents];
  1504. // 3.滚动到选择的日期
  1505. if (self.selectValue && ([self.selectValue isEqualToString:self.lastRowContent] || [self.selectValue isEqualToString:self.firstRowContent])) {
  1506. [self scrollToCustomString:NO];
  1507. } else {
  1508. [self scrollToSelectDate:self.mSelectDate animated:NO];
  1509. }
  1510. }
  1511. }
  1512. - (void)addPickerToView:(UIView *)view {
  1513. _containerView = view;
  1514. [self setupDateFormatter:self.pickerMode];
  1515. // 1.添加日期选择器
  1516. if (self.style == BRDatePickerStyleSystem) {
  1517. [self setupPickerView:self.datePicker toView:view];
  1518. } else if (self.style == BRDatePickerStyleCustom) {
  1519. [self setupPickerView:self.pickerView toView:view];
  1520. if (self.showUnitType == BRShowUnitTypeOnlyCenter) {
  1521. // 添加日期单位到选择器
  1522. [self addUnitLabel];
  1523. }
  1524. }
  1525. // ③添加中间选择行的两条分割线
  1526. if (self.pickerStyle.clearPickerNewStyle) {
  1527. [self.pickerStyle addSeparatorLineView:self.pickerView];
  1528. }
  1529. // 2.绑定数据
  1530. [self reloadData];
  1531. __weak typeof(self) weakSelf = self;
  1532. self.doneBlock = ^{
  1533. // 点击确定按钮后,执行block回调
  1534. if (weakSelf.resultBlock) {
  1535. weakSelf.resultBlock(weakSelf.mSelectDate, weakSelf.mSelectValue);
  1536. }
  1537. if (weakSelf.resultRangeBlock) {
  1538. weakSelf.resultRangeBlock(weakSelf.getSelectRangeDate.firstObject, weakSelf.getSelectRangeDate.lastObject, weakSelf.mSelectValue);
  1539. }
  1540. };
  1541. [super addPickerToView:view];
  1542. }
  1543. #pragma mark - 添加日期单位到选择器
  1544. - (void)addUnitLabel {
  1545. if (self.unitLabelArr.count > 0) {
  1546. for (UILabel *unitLabel in self.unitLabelArr) {
  1547. [unitLabel removeFromSuperview];
  1548. }
  1549. self.unitLabelArr = nil;
  1550. }
  1551. self.unitLabelArr = [self setupPickerUnitLabel:self.pickerView unitArr:self.unitArr];
  1552. }
  1553. #pragma mark - 重写父类方法
  1554. - (void)addSubViewToPicker:(UIView *)customView {
  1555. if (self.style == BRDatePickerStyleSystem) {
  1556. [self.datePicker addSubview:customView];
  1557. } else if (self.style == BRDatePickerStyleCustom) {
  1558. [self.pickerView addSubview:customView];
  1559. }
  1560. }
  1561. #pragma mark - 弹出选择器视图
  1562. - (void)show {
  1563. [self addPickerToView:nil];
  1564. }
  1565. #pragma mark - 关闭选择器视图
  1566. - (void)dismiss {
  1567. [self removePickerFromView:nil];
  1568. }
  1569. #pragma mark - setter 方法
  1570. - (void)setPickerMode:(BRDatePickerMode)pickerMode {
  1571. _pickerMode = pickerMode;
  1572. // 非空,表示二次设置
  1573. if (_datePicker || _pickerView) {
  1574. BRDatePickerStyle lastStyle = self.style;
  1575. [self setupDateFormatter:pickerMode];
  1576. // 系统样式 切换到 自定义样式
  1577. if (lastStyle == BRDatePickerStyleSystem && self.style == BRDatePickerStyleCustom) {
  1578. [self.datePicker removeFromSuperview];
  1579. [self setupPickerView:self.pickerView toView:_containerView];
  1580. }
  1581. // 自定义样式 切换到 系统样式
  1582. if (lastStyle == BRDatePickerStyleCustom && self.style == BRDatePickerStyleSystem) {
  1583. [self.pickerView removeFromSuperview];
  1584. [self setupPickerView:self.datePicker toView:_containerView];
  1585. }
  1586. // 刷新选择器数据
  1587. [self reloadData];
  1588. if (self.style == BRDatePickerStyleCustom && self.showUnitType == BRShowUnitTypeOnlyCenter) {
  1589. // 添加日期单位到选择器
  1590. [self addUnitLabel];
  1591. }
  1592. }
  1593. }
  1594. - (void)setAddToNow:(BOOL)addToNow {
  1595. _addToNow = addToNow;
  1596. if (addToNow) {
  1597. _maxDate = [NSDate date];
  1598. _lastRowContent = [NSBundle br_localizedStringForKey:@"至今" language:self.pickerStyle.language];
  1599. }
  1600. }
  1601. - (void)setLastRowContent:(NSString *)lastRowContent {
  1602. if (!_addToNow) {
  1603. _lastRowContent = lastRowContent;
  1604. }
  1605. }
  1606. // 支持动态设置选择的值
  1607. - (void)setSelectDate:(NSDate *)selectDate {
  1608. _selectDate = selectDate;
  1609. _mSelectDate = selectDate;
  1610. if (_datePicker || _pickerView) {
  1611. // 刷新选择器数据
  1612. [self reloadData];
  1613. }
  1614. }
  1615. - (void)setSelectValue:(NSString *)selectValue {
  1616. _selectValue = selectValue;
  1617. _mSelectValue = selectValue;
  1618. if (_datePicker || _pickerView) {
  1619. // 刷新选择器数据
  1620. [self reloadData];
  1621. }
  1622. }
  1623. - (void)setAddCustomString:(NSString *)addCustomString {
  1624. self.lastRowContent = addCustomString;
  1625. }
  1626. #pragma mark - getter 方法
  1627. - (NSArray *)yearArr {
  1628. if (!_yearArr) {
  1629. _yearArr = [NSArray array];
  1630. }
  1631. return _yearArr;
  1632. }
  1633. - (NSArray *)monthArr {
  1634. if (!_monthArr) {
  1635. _monthArr = [NSArray array];
  1636. }
  1637. return _monthArr;
  1638. }
  1639. - (NSArray *)dayArr {
  1640. if (!_dayArr) {
  1641. _dayArr = [NSArray array];
  1642. }
  1643. return _dayArr;
  1644. }
  1645. - (NSArray *)hourArr {
  1646. if (!_hourArr) {
  1647. _hourArr = [NSArray array];
  1648. }
  1649. return _hourArr;
  1650. }
  1651. - (NSArray *)minuteArr {
  1652. if (!_minuteArr) {
  1653. _minuteArr = [NSArray array];
  1654. }
  1655. return _minuteArr;
  1656. }
  1657. - (NSArray *)secondArr {
  1658. if (!_secondArr) {
  1659. _secondArr = [NSArray array];
  1660. }
  1661. return _secondArr;
  1662. }
  1663. - (NSInteger)minuteInterval {
  1664. if (_minuteInterval < 1 || _minuteInterval > 30) {
  1665. _minuteInterval = 1;
  1666. }
  1667. return _minuteInterval;
  1668. }
  1669. - (NSInteger)secondInterval {
  1670. if (_secondInterval < 1 || _secondInterval > 30) {
  1671. _secondInterval = 1;
  1672. }
  1673. return _secondInterval;
  1674. }
  1675. - (NSArray *)unitArr {
  1676. if (!_unitArr) {
  1677. _unitArr = [NSArray array];
  1678. }
  1679. return _unitArr;
  1680. }
  1681. - (NSArray<UILabel *> *)unitLabelArr {
  1682. if (!_unitLabelArr) {
  1683. _unitLabelArr = [NSArray array];
  1684. }
  1685. return _unitLabelArr;
  1686. }
  1687. - (NSArray<NSString *> *)monthNames {
  1688. if (!_monthNames) {
  1689. _monthNames = [NSArray array];
  1690. }
  1691. return _monthNames;
  1692. }
  1693. - (NSString *)getYearString {
  1694. NSInteger index = 0;
  1695. if (self.yearIndex >= 0 && self.yearIndex < self.yearArr.count) {
  1696. index = self.yearIndex;
  1697. }
  1698. return [self.yearArr objectAtIndex:index];
  1699. }
  1700. - (NSString *)getMonthString {
  1701. NSInteger index = 0;
  1702. if (self.monthIndex >= 0 && self.monthIndex < self.monthArr.count) {
  1703. index = self.monthIndex;
  1704. }
  1705. return [self.monthArr objectAtIndex:index];
  1706. }
  1707. - (NSString *)getDayString {
  1708. NSInteger index = 0;
  1709. if (self.dayIndex >= 0 && self.dayIndex < self.dayArr.count) {
  1710. index = self.dayIndex;
  1711. }
  1712. return [self.dayArr objectAtIndex:index];
  1713. }
  1714. - (NSString *)getHourString {
  1715. NSInteger index = 0;
  1716. if (self.hourIndex >= 0 && self.hourIndex < self.hourArr.count) {
  1717. index = self.hourIndex;
  1718. }
  1719. return [self.hourArr objectAtIndex:index];
  1720. }
  1721. - (NSString *)getMinuteString {
  1722. NSInteger index = 0;
  1723. if (self.minuteIndex >= 0 && self.minuteIndex < self.minuteArr.count) {
  1724. index = self.minuteIndex;
  1725. }
  1726. return [self.minuteArr objectAtIndex:index];
  1727. }
  1728. - (NSString *)getSecondString {
  1729. NSInteger index = 0;
  1730. if (self.secondIndex >= 0 && self.secondIndex < self.secondArr.count) {
  1731. index = self.secondIndex;
  1732. }
  1733. return [self.secondArr objectAtIndex:index];
  1734. }
  1735. - (NSString *)getMonthWeekString {
  1736. NSInteger index = 0;
  1737. if (self.monthWeekIndex >= 0 && self.monthWeekIndex < self.monthWeekArr.count) {
  1738. index = self.monthWeekIndex;
  1739. }
  1740. return [self.monthWeekArr objectAtIndex:index];
  1741. }
  1742. - (NSString *)getYearWeekString {
  1743. NSInteger index = 0;
  1744. if (self.yearWeekIndex >= 0 && self.yearWeekIndex < self.yearWeekArr.count) {
  1745. index = self.yearWeekIndex;
  1746. }
  1747. return [self.yearWeekArr objectAtIndex:index];
  1748. }
  1749. - (NSString *)getQuarterString {
  1750. NSInteger index = 0;
  1751. if (self.quarterIndex >= 0 && self.quarterIndex < self.quarterArr.count) {
  1752. index = self.quarterIndex;
  1753. }
  1754. return [self.quarterArr objectAtIndex:index];
  1755. }
  1756. #pragma mark - 获取选中日期范围
  1757. - (NSArray<NSDate *> *)getSelectRangeDate {
  1758. NSDate *startDate, *endDate = nil;
  1759. switch (self.pickerMode) {
  1760. case BRDatePickerModeYMDHMS:
  1761. case BRDatePickerModeMS:
  1762. case BRDatePickerModeHMS:
  1763. {
  1764. endDate = self.mSelectDate;
  1765. startDate = self.mSelectDate;
  1766. }
  1767. break;
  1768. case BRDatePickerModeYMDHM:
  1769. case BRDatePickerModeMDHM:
  1770. case BRDatePickerModeHM:
  1771. case BRDatePickerModeDateAndTime:
  1772. case BRDatePickerModeTime:
  1773. {
  1774. NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
  1775. startDate = tempDate;
  1776. endDate = [tempDate dateByAddingTimeInterval:59];
  1777. }
  1778. break;
  1779. case BRDatePickerModeYMDH:
  1780. {
  1781. NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
  1782. startDate = tempDate;
  1783. endDate = [tempDate dateByAddingTimeInterval:60 * 59 + 59];
  1784. }
  1785. break;
  1786. case BRDatePickerModeMD:
  1787. case BRDatePickerModeYMD:
  1788. case BRDatePickerModeDate:
  1789. {
  1790. NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
  1791. startDate = tempDate;
  1792. endDate = [[tempDate br_getNewDateToDays:1] dateByAddingTimeInterval:-1];
  1793. }
  1794. break;
  1795. case BRDatePickerModeYM:
  1796. {
  1797. NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
  1798. startDate = tempDate;
  1799. endDate = [[tempDate br_getNewDateToMonths:1] dateByAddingTimeInterval:-1];
  1800. }
  1801. break;
  1802. case BRDatePickerModeY:
  1803. {
  1804. NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
  1805. startDate = tempDate;
  1806. endDate = [[tempDate br_getNewDateToMonths:12] dateByAddingTimeInterval:-1];
  1807. }
  1808. break;
  1809. case BRDatePickerModeYMW:
  1810. case BRDatePickerModeYW:
  1811. {
  1812. NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
  1813. endDate = [tempDate dateByAddingTimeInterval:-1];
  1814. startDate = [tempDate br_getNewDateToDays:-7];
  1815. }
  1816. break;
  1817. case BRDatePickerModeYQ:
  1818. {
  1819. startDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
  1820. endDate = [[startDate br_getNewDateToMonths:3] dateByAddingTimeInterval:-1];
  1821. }
  1822. break;
  1823. default:
  1824. break;
  1825. }
  1826. NSMutableArray *dataArr = [NSMutableArray array];
  1827. if (startDate)
  1828. [dataArr addObject:startDate];
  1829. if (endDate)
  1830. [dataArr addObject:endDate];
  1831. return dataArr;
  1832. }
  1833. @end