123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965 |
- //
- // BRDatePickerView.m
- // BRPickerViewDemo
- //
- // Created by renbo on 2017/8/11.
- // Copyright © 2017 irenb. All rights reserved.
- //
- // 最新代码下载地址:https://github.com/91renb/BRPickerView
- #import "BRDatePickerView.h"
- #import "NSBundle+BRPickerView.h"
- #import "BRDatePickerView+BR.h"
- /// 日期选择器的类型
- typedef NS_ENUM(NSInteger, BRDatePickerStyle) {
- BRDatePickerStyleSystem, // 系统样式:使用 UIDatePicker
- BRDatePickerStyleCustom // 自定义样式:使用 UIPickerView
- };
- @interface BRDatePickerView ()<UIPickerViewDataSource, UIPickerViewDelegate>
- {
- UIDatePickerMode _datePickerMode;
- UIView *_containerView;
- BOOL _isAdjustSelectRow; // 设置minDate时,调整日期联动的选择(解决日期选择器联动不正确的问题)
- }
- /** 日期选择器1 */
- @property (nonatomic, strong) UIDatePicker *datePicker;
- /** 日期选择器2 */
- @property (nonatomic, strong) UIPickerView *pickerView;
- /// 日期存储数组
- @property(nonatomic, copy) NSArray *yearArr;
- @property(nonatomic, copy) NSArray *monthArr;
- @property(nonatomic, copy) NSArray *dayArr;
- @property(nonatomic, copy) NSArray *hourArr;
- @property(nonatomic, copy) NSArray *minuteArr;
- @property(nonatomic, copy) NSArray *secondArr;
- /// 月周、年周、季度数组
- @property(nonatomic, copy) NSArray *monthWeekArr;
- @property(nonatomic, copy) NSArray *yearWeekArr;
- @property(nonatomic, copy) NSArray *quarterArr;
- /// 记录 年、月、日、时、分、秒 当前选择的位置
- @property(nonatomic, assign) NSInteger yearIndex;
- @property(nonatomic, assign) NSInteger monthIndex;
- @property(nonatomic, assign) NSInteger dayIndex;
- @property(nonatomic, assign) NSInteger hourIndex;
- @property(nonatomic, assign) NSInteger minuteIndex;
- @property(nonatomic, assign) NSInteger secondIndex;
- /// 月周、年周、季度 当前选择的位置
- @property(nonatomic, assign) NSInteger monthWeekIndex;
- @property(nonatomic, assign) NSInteger yearWeekIndex;
- @property(nonatomic, assign) NSInteger quarterIndex;
- // 记录选择的值
- @property (nonatomic, strong) NSDate *mSelectDate;
- @property (nonatomic, copy) NSString *mSelectValue;
- /** 日期选择器的类型 */
- @property (nonatomic, assign) BRDatePickerStyle style;
- /** 日期的格式 */
- @property (nonatomic, copy) NSString *dateFormatter;
- /** 单位数组 */
- @property (nonatomic, copy) NSArray *unitArr;
- /** 单位label数组 */
- @property (nonatomic, copy) NSArray <UILabel *> *unitLabelArr;
- @end
- @implementation BRDatePickerView
- #pragma mark - 1.显示日期选择器
- + (void)showDatePickerWithMode:(BRDatePickerMode)mode
- title:(NSString *)title
- selectValue:(NSString *)selectValue
- resultBlock:(BRDateResultBlock)resultBlock {
- [self showDatePickerWithMode:mode title:title selectValue:selectValue minDate:nil maxDate:nil isAutoSelect:NO resultBlock:resultBlock];
- }
- #pragma mark - 2.显示日期选择器
- + (void)showDatePickerWithMode:(BRDatePickerMode)mode
- title:(NSString *)title
- selectValue:(NSString *)selectValue
- isAutoSelect:(BOOL)isAutoSelect
- resultBlock:(BRDateResultBlock)resultBlock {
- [self showDatePickerWithMode:mode title:title selectValue:selectValue minDate:nil maxDate:nil isAutoSelect:isAutoSelect resultBlock:resultBlock];
- }
- #pragma mark - 3.显示日期选择器
- + (void)showDatePickerWithMode:(BRDatePickerMode)mode
- title:(NSString *)title
- selectValue:(NSString *)selectValue
- minDate:(NSDate *)minDate
- maxDate:(NSDate *)maxDate
- isAutoSelect:(BOOL)isAutoSelect
- resultBlock:(BRDateResultBlock)resultBlock {
- [self showDatePickerWithMode:mode title:title selectValue:selectValue minDate:nil maxDate:nil isAutoSelect:isAutoSelect resultBlock:resultBlock resultRangeBlock:nil];
- }
- #pragma mark - 4.显示日期选择器
- + (void)showDatePickerWithMode:(BRDatePickerMode)mode
- title:(NSString *)title
- selectValue:(NSString *)selectValue
- minDate:(NSDate *)minDate
- maxDate:(NSDate *)maxDate
- isAutoSelect:(BOOL)isAutoSelect
- resultBlock:(BRDateResultBlock)resultBlock
- resultRangeBlock:(BRDateResultRangeBlock)resultRangeBlock {
- // 创建日期选择器
- BRDatePickerView *datePickerView = [[BRDatePickerView alloc]init];
- datePickerView.pickerMode = mode;
- datePickerView.title = title;
- datePickerView.selectValue = selectValue;
- datePickerView.minDate = minDate;
- datePickerView.maxDate = maxDate;
- datePickerView.isAutoSelect = isAutoSelect;
- datePickerView.resultBlock = resultBlock;
- datePickerView.resultRangeBlock = resultRangeBlock;
- // 显示
- [datePickerView show];
- }
- #pragma mark - 初始化日期选择器
- - (instancetype)initWithPickerMode:(BRDatePickerMode)pickerMode {
- if (self = [super init]) {
- self.pickerMode = pickerMode;
- }
- return self;
- }
- #pragma mark - 处理选择器数据
- - (void)handlerPickerData {
- // 1.最小日期限制
- self.minDate = [self handlerMinDate:self.minDate];
- // 2.最大日期限制
- self.maxDate = [self handlerMaxDate:self.maxDate];
-
- BOOL minMoreThanMax = [self br_compareDate:self.minDate targetDate:self.maxDate dateFormat:self.dateFormatter] == NSOrderedDescending;
- NSAssert(!minMoreThanMax, @"最小日期不能大于最大日期!");
- if (minMoreThanMax) {
- // 如果最小日期大于了最大日期,就忽略两个值
- self.minDate = [NSDate distantPast]; // 0000-12-30 00:00:00 +0000
- self.maxDate = [NSDate distantFuture]; // 4001-01-01 00:00:00 +0000
- }
-
- // 3.默认选中的日期
- self.mSelectDate = [self handlerSelectDate:self.selectDate dateFormat:self.dateFormatter];
-
- // 4.设置选择器日期数据
- if (self.style == BRDatePickerStyleCustom) {
- [self setupDateArray];
- }
-
- if (self.selectValue && ([self.selectValue isEqualToString:self.lastRowContent] || [self.selectValue isEqualToString:self.firstRowContent])) {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- } else {
- if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) {
- self.hourIndex = (self.mSelectDate.br_hour < 12 ? 0 : 1);
- self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %@", (int)self.mSelectDate.br_year, (int)self.mSelectDate.br_month, (int)self.mSelectDate.br_day, [self getHourString]];
- } else {
- self.mSelectValue = [self br_stringFromDate:self.mSelectDate dateFormat:self.dateFormatter];
- }
- }
- }
- #pragma mark - 设置默认日期数据源
- - (void)setupDateArray {
- if (self.selectValue && ([self.selectValue isEqualToString:self.lastRowContent] || [self.selectValue isEqualToString:self.firstRowContent])) {
- switch (self.pickerMode) {
- case BRDatePickerModeYMDHMS:
- case BRDatePickerModeYMDHM:
- case BRDatePickerModeYMDH:
- case BRDatePickerModeYMD:
- case BRDatePickerModeYM:
- case BRDatePickerModeY:
- {
- self.yearArr = [self getYearArr];
- self.monthArr = nil;
- self.dayArr = nil;
- self.hourArr = nil;
- self.minuteArr = nil;
- self.secondArr = nil;
- self.monthWeekArr = nil;
- self.yearWeekArr = nil;
- self.quarterArr = nil;
- }
- break;
- case BRDatePickerModeMDHM:
- case BRDatePickerModeMD:
- {
- self.yearArr = [self getYearArr];
- self.monthArr = [self getMonthArr:self.mSelectDate.br_year];
- self.dayArr = nil;
- self.hourArr = nil;
- self.minuteArr = nil;
- self.secondArr = nil;
- self.monthWeekArr = nil;
- self.yearWeekArr = nil;
- self.quarterArr = nil;
- }
- break;
- case BRDatePickerModeHMS:
- case BRDatePickerModeHM:
- {
- self.yearArr = [self getYearArr];
- self.monthArr = [self getMonthArr:self.mSelectDate.br_year];
- self.dayArr = [self getDayArr:self.mSelectDate.br_year month:self.mSelectDate.br_month];
- self.hourArr = [self getHourArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day];
- self.minuteArr = nil;
- self.secondArr = nil;
- self.monthWeekArr = nil;
- self.yearWeekArr = nil;
- self.quarterArr = nil;
- }
- break;
- case BRDatePickerModeMS:
- {
- self.yearArr = [self getYearArr];
- self.monthArr = [self getMonthArr:self.mSelectDate.br_year];
- self.dayArr = [self getDayArr:self.mSelectDate.br_year month:self.mSelectDate.br_month];
- self.hourArr = [self getHourArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day];
- self.minuteArr = [self getMinuteArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day hour:self.mSelectDate.br_hour];
- self.secondArr = nil;
- self.monthWeekArr = nil;
- self.yearWeekArr = nil;
- self.quarterArr = nil;
- }
- break;
- case BRDatePickerModeYMW:
- {
- self.yearArr = [self getYearArr];
- self.monthArr = [self getMonthArr:self.mSelectDate.br_year];
- self.monthWeekArr = [self getMonthWeekArr:self.mSelectDate.br_year month:self.mSelectDate.br_month];
- self.yearWeekArr = nil;
- self.quarterArr = nil;
- self.dayArr = nil;
- self.hourArr = nil;
- self.minuteArr = nil;
- self.secondArr = nil;
- }
- break;
- case BRDatePickerModeYW:
- {
- self.yearArr = [self getYearArr];
- self.monthArr = nil;
- self.monthWeekArr = nil;
- self.yearWeekArr = [self getYearWeekArr:self.mSelectDate.br_year];
- self.quarterArr = nil;
- self.dayArr = nil;
- self.hourArr = nil;
- self.minuteArr = nil;
- self.secondArr = nil;
- }
- break;
- case BRDatePickerModeYQ:
- {
- self.yearArr = [self getYearArr];
- self.monthArr = nil;
- self.monthWeekArr = nil;
- self.yearWeekArr = nil;
- self.quarterArr = [self getQuarterArr:self.mSelectDate.br_year];;
- self.dayArr = nil;
- self.hourArr = nil;
- self.minuteArr = nil;
- self.secondArr = nil;
- }
- break;
-
- default:
- break;
- }
- } else {
- self.yearArr = [self getYearArr];
- self.monthArr = [self getMonthArr:self.mSelectDate.br_year];
- self.dayArr = [self getDayArr:self.mSelectDate.br_year month:self.mSelectDate.br_month];
- self.hourArr = [self getHourArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day];
- self.minuteArr = [self getMinuteArr:self.mSelectDate.br_year month:self.mSelectDate.br_month day:self.mSelectDate.br_day hour:self.mSelectDate.br_hour];
- 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];
-
- self.monthWeekArr = [self getMonthWeekArr:self.mSelectDate.br_year month:self.mSelectDate.br_month];
- self.yearWeekArr = [self getYearWeekArr:self.mSelectDate.br_year];
- self.quarterArr = [self getQuarterArr:self.mSelectDate.br_year];
- }
- }
- - (void)setupDateFormatter:(BRDatePickerMode)mode {
- switch (mode) {
- case BRDatePickerModeDate:
- {
- self.dateFormatter = @"yyyy-MM-dd";
- self.style = BRDatePickerStyleSystem;
- _datePickerMode = UIDatePickerModeDate;
- }
- break;
- case BRDatePickerModeDateAndTime:
- {
- self.dateFormatter = @"yyyy-MM-dd HH:mm";
- self.style = BRDatePickerStyleSystem;
- _datePickerMode = UIDatePickerModeDateAndTime;
- }
- break;
- case BRDatePickerModeTime:
- {
- self.dateFormatter = @"HH:mm";
- self.style = BRDatePickerStyleSystem;
- _datePickerMode = UIDatePickerModeTime;
- }
- break;
- case BRDatePickerModeCountDownTimer:
- {
- self.dateFormatter = @"HH:mm";
- self.style = BRDatePickerStyleSystem;
- _datePickerMode = UIDatePickerModeCountDownTimer;
- }
- break;
-
- case BRDatePickerModeYMDHMS:
- {
- self.dateFormatter = @"yyyy-MM-dd HH:mm:ss";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit], [self getHourUnit], [self getMinuteUnit], [self getSecondUnit]];
- }
- break;
- case BRDatePickerModeYMDHM:
- {
- self.dateFormatter = @"yyyy-MM-dd HH:mm";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit], [self getHourUnit], [self getMinuteUnit]];
- }
- break;
- case BRDatePickerModeYMDH:
- {
- self.dateFormatter = @"yyyy-MM-dd HH";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit], self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM ? @"" : [self getHourUnit]];
- }
- break;
- case BRDatePickerModeMDHM:
- {
- self.dateFormatter = @"MM-dd HH:mm";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getMonthUnit], [self getDayUnit], [self getHourUnit], [self getMinuteUnit]];
- }
- break;
- case BRDatePickerModeYMD:
- {
- self.dateFormatter = @"yyyy-MM-dd";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getDayUnit]];
- }
- break;
- case BRDatePickerModeYM:
- {
- self.dateFormatter = @"yyyy-MM";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getYearUnit], [self getMonthUnit]];
- }
- break;
- case BRDatePickerModeY:
- {
- self.dateFormatter = @"yyyy";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getYearUnit]];
- }
- break;
- case BRDatePickerModeMD:
- {
- self.dateFormatter = @"MM-dd";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getMonthUnit], [self getDayUnit]];
- }
- break;
- case BRDatePickerModeHMS:
- {
- self.dateFormatter = @"HH:mm:ss";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getHourUnit], [self getMinuteUnit], [self getSecondUnit]];
- }
- break;
- case BRDatePickerModeHM:
- {
- self.dateFormatter = @"HH:mm";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getHourUnit], [self getMinuteUnit]];
- }
- break;
- case BRDatePickerModeMS:
- {
- self.dateFormatter = @"mm:ss";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getMinuteUnit], [self getSecondUnit]];
- }
- break;
- case BRDatePickerModeYMW:
- {
- self.dateFormatter = @"yyyy-MM-WW";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getYearUnit], [self getMonthUnit], [self getWeekUnit]];
- }
- break;
- case BRDatePickerModeYW:
- {
- self.dateFormatter = @"yyyy-ww";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getYearUnit], [self getWeekUnit]];
- }
- break;
- case BRDatePickerModeYQ:
- {
- self.dateFormatter = @"yyyy-qq";
- self.style = BRDatePickerStyleCustom;
- self.unitArr = @[[self getYearUnit], [self getQuarterUnit]];
- }
- break;
-
- default:
- break;
- }
- }
- #pragma mark - 更新日期数据源数组
- - (void)reloadDateArrayWithUpdateMonth:(BOOL)updateMonth updateDay:(BOOL)updateDay updateHour:(BOOL)updateHour updateMinute:(BOOL)updateMinute updateSecond:(BOOL)updateSecond {
- [self reloadDateArrayWithUpdateMonth:updateMonth updateDay:updateDay updateHour:updateHour updateMinute:updateMinute updateSecond:NO updateWeekOfMonth:NO updateWeekOfYear:NO updateQuarter:NO];
- }
- - (void)reloadDateArrayWithUpdateMonth:(BOOL)updateMonth updateDay:(BOOL)updateDay updateHour:(BOOL)updateHour updateMinute:(BOOL)updateMinute updateSecond:(BOOL)updateSecond
- updateWeekOfMonth:(BOOL)updateWeekOfMonth updateWeekOfYear:(BOOL)updateWeekOfYear updateQuarter:(BOOL)updateQuarter {
- _isAdjustSelectRow = NO;
- // 1.更新 monthArr
- if (self.yearArr.count == 0) {
- return;
- }
- NSString *yearString = [self getYearString];
- if ((self.lastRowContent && [yearString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [yearString isEqualToString:self.firstRowContent])) {
- self.monthArr = nil;
- self.dayArr = nil;
- self.hourArr = nil;
- self.minuteArr = nil;
- self.secondArr = nil;
- self.monthWeekArr = nil;
- self.yearWeekArr = nil;
- self.quarterArr = nil;
-
- return;
- }
- if (updateMonth) {
- NSString *lastSelectMonth = [self getMDHMSNumber:self.mSelectDate.br_month];
- self.monthArr = [self getMonthArr:[yearString integerValue]];
- if (self.mSelectDate) {
- if ([self.monthArr containsObject:lastSelectMonth]) {
- NSInteger monthIndex = [self.monthArr indexOfObject:lastSelectMonth];
- if (monthIndex != self.monthIndex) {
- _isAdjustSelectRow = YES;
- self.monthIndex = monthIndex;
- }
- } else {
- _isAdjustSelectRow = YES;
- self.monthIndex = ([lastSelectMonth intValue] < [self.monthArr.firstObject intValue]) ? 0 : (self.monthArr.count - 1);
- }
- }
- }
-
- // 1/1.更新 yearWeekArr
- if (updateWeekOfYear) {
- NSString *lastSelectWeekOfYear = [self getMDHMSNumber:self.mSelectDate.br_yearWeek];
- self.yearWeekArr = [self getYearWeekArr:[yearString integerValue]];
- if (self.mSelectDate) {
- if ([self.yearWeekArr containsObject:lastSelectWeekOfYear]) {
- NSInteger yearWeekIndex = [self.yearWeekArr indexOfObject:lastSelectWeekOfYear];
- if (yearWeekIndex != self.yearWeekIndex) {
- _isAdjustSelectRow = YES;
- self.monthIndex = yearWeekIndex;
- }
- } else {
- _isAdjustSelectRow = YES;
- self.yearWeekIndex = ([lastSelectWeekOfYear intValue] < [self.yearWeekArr.firstObject intValue]) ? 0 : (self.yearWeekArr.count - 1);
- }
- }
- }
-
- // 1/1.更新 quarterArr
- if (updateQuarter) {
- NSString *lastSelectQuarter = [self getMDHMSNumber:self.mSelectDate.br_quarter];
- self.quarterArr = [self getQuarterArr:[yearString integerValue]];
- if (self.mSelectDate) {
- if ([self.quarterArr containsObject:lastSelectQuarter]) {
- NSInteger quarterIndex = [self.quarterArr indexOfObject:lastSelectQuarter];
- if (quarterIndex != self.quarterIndex) {
- _isAdjustSelectRow = YES;
- self.quarterIndex = quarterIndex;
- }
- } else {
- _isAdjustSelectRow = YES;
- self.quarterIndex = ([lastSelectQuarter intValue] < [self.quarterArr.firstObject intValue]) ? 0 : (self.quarterArr.count - 1);
- }
- }
- }
-
- // 2.更新 dayArr
- if (self.monthArr.count == 0) {
- return;
- }
- NSString *monthString = [self getMonthString];
- if ((self.lastRowContent && [monthString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [monthString isEqualToString:self.firstRowContent])) {
- self.dayArr = nil;
- self.hourArr = nil;
- self.minuteArr = nil;
- self.secondArr = nil;
- self.monthWeekArr = nil;
-
- return;
- }
- if (updateDay) {
- NSString *lastSelectDay = [self getMDHMSNumber:self.mSelectDate.br_day];
- self.dayArr = [self getDayArr:[yearString integerValue] month:[monthString integerValue]];
- if (self.mSelectDate) {
- if ([self.dayArr containsObject:lastSelectDay]) {
- NSInteger dayIndex = [self.dayArr indexOfObject:lastSelectDay];
- if (dayIndex != self.dayIndex) {
- _isAdjustSelectRow = YES;
- self.dayIndex = dayIndex;
- }
- } else {
- _isAdjustSelectRow = YES;
- self.dayIndex = ([lastSelectDay intValue] < [self.dayArr.firstObject intValue]) ? 0 : (self.dayArr.count - 1);
- }
- }
- }
-
- // 2/1.更新 monthWeekArr
- if (updateWeekOfMonth) {
- NSString *lastWeekOfMonth = [self getMDHMSNumber:self.mSelectDate.br_monthWeek];
- self.monthWeekArr = [self getMonthWeekArr:[yearString integerValue] month:[monthString integerValue]];
- if (self.mSelectDate) {
- if ([self.monthWeekArr containsObject:lastWeekOfMonth]) {
- NSInteger monthWeekIndex = [self.monthWeekArr indexOfObject:lastWeekOfMonth];
- if (monthWeekIndex != self.monthWeekIndex) {
- _isAdjustSelectRow = YES;
- self.monthWeekIndex = monthWeekIndex;
- }
- } else {
- _isAdjustSelectRow = YES;
- self.monthWeekIndex = ([lastWeekOfMonth intValue] < [self.monthWeekArr.firstObject intValue]) ? 0 : (self.monthWeekArr.count - 1);
- }
- }
- }
-
- // 3.更新 hourArr
- if (self.dayArr.count == 0) {
- return;
- }
- NSInteger day = [[self getDayString] integerValue];
- if (updateHour) {
- NSString *lastSelectHour = [self getMDHMSNumber:self.mSelectDate.br_hour];
- self.hourArr = [self getHourArr:[yearString integerValue] month:[monthString integerValue] day:day];
- if (self.mSelectDate) {
- if ([self.hourArr containsObject:lastSelectHour]) {
- NSInteger hourIndex = [self.hourArr indexOfObject:lastSelectHour];
- if (hourIndex != self.hourIndex) {
- _isAdjustSelectRow = YES;
- self.hourIndex = hourIndex;
- }
- } else {
- _isAdjustSelectRow = YES;
- self.hourIndex = ([lastSelectHour intValue] < [self.hourArr.firstObject intValue]) ? 0 : (self.hourArr.count - 1);
- }
- }
- }
-
- // 4.更新 minuteArr
- if (self.hourArr.count == 0) {
- return;
- }
- NSString *hourString = [self getHourString];
- if ((self.lastRowContent && [hourString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [hourString isEqualToString:self.firstRowContent])) {
- self.minuteArr = nil;
- self.secondArr = nil;
-
- return;
- }
- if (updateMinute) {
- NSString *lastSelectMinute = [self getMDHMSNumber:self.mSelectDate.br_minute];
- self.minuteArr = [self getMinuteArr:[yearString integerValue] month:[monthString integerValue] day:day hour:[hourString integerValue]];
- if (self.mSelectDate) {
- if ([self.minuteArr containsObject:lastSelectMinute]) {
- NSInteger minuteIndex = [self.minuteArr indexOfObject:lastSelectMinute];
- if (minuteIndex != self.minuteIndex) {
- _isAdjustSelectRow = YES;
- self.minuteIndex = minuteIndex;
- }
- } else {
- _isAdjustSelectRow = YES;
- self.minuteIndex = ([lastSelectMinute intValue] < [self.minuteArr.firstObject intValue]) ? 0 : (self.minuteArr.count - 1);
- }
- }
- }
-
- // 5.更新 secondArr
- if (self.minuteArr.count == 0) {
- return;
- }
- NSString *minuteString = [self getMinuteString];
- if ((self.lastRowContent && [minuteString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [minuteString isEqualToString:self.firstRowContent])) {
- self.secondArr = nil;
- return;
- }
- if (updateSecond) {
- NSString *lastSelectSecond = [self getMDHMSNumber:self.mSelectDate.br_second];
- self.secondArr = [self getSecondArr:[yearString integerValue] month:[monthString integerValue] day:day hour:[hourString integerValue] minute:[minuteString integerValue]];
- if (self.mSelectDate) {
- if ([self.secondArr containsObject:lastSelectSecond]) {
- NSInteger secondIndex = [self.secondArr indexOfObject:lastSelectSecond];
- if (secondIndex != self.secondIndex) {
- _isAdjustSelectRow = YES;
- self.secondIndex = secondIndex;
- }
- } else {
- _isAdjustSelectRow = YES;
- self.secondIndex = ([lastSelectSecond intValue] < [self.secondArr.firstObject intValue]) ? 0 : (self.secondArr.count - 1);
- }
- }
- }
- }
- #pragma mark - 滚动到指定日期的位置(更新选择的索引)
- - (void)scrollToSelectDate:(NSDate *)selectDate animated:(BOOL)animated {
- self.yearIndex = [self getIndexWithArray:self.yearArr object:[self getYearNumber:selectDate.br_year]];
- self.monthIndex = [self getIndexWithArray:self.monthArr object:[self getMDHMSNumber:selectDate.br_month]];
- self.dayIndex = [self getIndexWithArray:self.dayArr object:[self getMDHMSNumber:selectDate.br_day]];
- if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) {
- self.hourIndex = selectDate.br_hour < 12 ? 0 : 1;
- } else {
- self.hourIndex = [self getIndexWithArray:self.hourArr object:[self getMDHMSNumber:selectDate.br_hour]];
- }
- self.minuteIndex = [self getIndexWithArray:self.minuteArr object:[self getMDHMSNumber:selectDate.br_minute]];
- self.secondIndex = [self getIndexWithArray:self.secondArr object:[self getMDHMSNumber:selectDate.br_second]];
-
- NSArray *indexArr = nil;
- if (self.pickerMode == BRDatePickerModeYMDHMS) {
- indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex), @(self.hourIndex), @(self.minuteIndex), @(self.secondIndex)];
- } else if (self.pickerMode == BRDatePickerModeYMDHM) {
- indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex), @(self.hourIndex), @(self.minuteIndex)];
- } else if (self.pickerMode == BRDatePickerModeYMDH) {
- indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex), @(self.hourIndex)];
- } else if (self.pickerMode == BRDatePickerModeMDHM) {
- indexArr = @[@(self.monthIndex), @(self.dayIndex), @(self.hourIndex), @(self.minuteIndex)];
- } else if (self.pickerMode == BRDatePickerModeYMD) {
- if ([self.pickerStyle.language hasPrefix:@"zh"]) {
- indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.dayIndex)];
- } else {
- indexArr = @[@(self.dayIndex), @(self.monthIndex), @(self.yearIndex)];
- }
- } else if (self.pickerMode == BRDatePickerModeYM) {
- if ([self.pickerStyle.language hasPrefix:@"zh"]) {
- indexArr = @[@(self.yearIndex), @(self.monthIndex)];
- } else {
- indexArr = @[@(self.monthIndex), @(self.yearIndex)];
- }
- } else if (self.pickerMode == BRDatePickerModeY) {
- indexArr = @[@(self.yearIndex)];
- } else if (self.pickerMode == BRDatePickerModeMD) {
- indexArr = @[@(self.monthIndex), @(self.dayIndex)];
- } else if (self.pickerMode == BRDatePickerModeHMS) {
- indexArr = @[@(self.hourIndex), @(self.minuteIndex), @(self.secondIndex)];
- } else if (self.pickerMode == BRDatePickerModeHM) {
- indexArr = @[@(self.hourIndex), @(self.minuteIndex)];
- } else if (self.pickerMode == BRDatePickerModeMS) {
- indexArr = @[@(self.minuteIndex), @(self.secondIndex)];
- } else if (self.pickerMode == BRDatePickerModeYMW) {
- indexArr = @[@(self.yearIndex), @(self.monthIndex), @(self.monthWeekIndex)];
- } else if (self.pickerMode == BRDatePickerModeYW) {
- indexArr = @[@(self.yearIndex), @(self.yearWeekIndex)];
- } else if (self.pickerMode == BRDatePickerModeYQ) {
- indexArr = @[@(self.yearIndex), @(self.quarterIndex)];
- }
- if (!indexArr) return;
- for (NSInteger i = 0; i < indexArr.count; i++) {
- [self.pickerView selectRow:[indexArr[i] integerValue] inComponent:i animated:animated];
- }
- }
- #pragma mark - 滚动到【自定义字符串】的位置
- - (void)scrollToCustomString:(BOOL)animated {
- switch (self.pickerMode) {
- case BRDatePickerModeYMDHMS:
- case BRDatePickerModeYMDHM:
- case BRDatePickerModeYMDH:
- case BRDatePickerModeYMD:
- case BRDatePickerModeYM:
- case BRDatePickerModeY:
- case BRDatePickerModeYMW:
- case BRDatePickerModeYW:
- case BRDatePickerModeYQ:
- {
- NSInteger yearIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.yearArr.count > 0) ? self.yearArr.count - 1 : 0;
- NSInteger component = 0;
- if ((self.pickerMode == BRDatePickerModeYMD || self.pickerMode == BRDatePickerModeYMW) && ![self.pickerStyle.language hasPrefix:@"zh"]) {
- component = 2;
- } else if ((self.pickerMode == BRDatePickerModeYM || self.pickerMode == BRDatePickerModeYQ) && ![self.pickerStyle.language hasPrefix:@"zh"]) {
- component = 1;
- }
- [self.pickerView selectRow:yearIndex inComponent:component animated:animated];
- }
- break;
- case BRDatePickerModeMDHM:
- case BRDatePickerModeMD:
- {
- NSInteger monthIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.monthArr.count > 0) ? self.monthArr.count - 1 : 0;
- [self.pickerView selectRow:monthIndex inComponent:0 animated:animated];
- }
- break;
- case BRDatePickerModeHMS:
- case BRDatePickerModeHM:
- {
- NSInteger hourIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.hourArr.count > 0) ? self.hourArr.count - 1 : 0;
- [self.pickerView selectRow:hourIndex inComponent:0 animated:animated];
- }
- break;
- case BRDatePickerModeMS:
- {
- NSInteger minuteIndex = ([self.selectValue isEqualToString:self.lastRowContent] && self.minuteArr.count > 0) ? self.minuteArr.count - 1 : 0;
- [self.pickerView selectRow:minuteIndex inComponent:0 animated:animated];
- }
- break;
-
- default:
- break;
- }
- }
- #pragma mark - 日期选择器1
- - (UIDatePicker *)datePicker {
- if (!_datePicker) {
- CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
- _datePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight)];
- _datePicker.backgroundColor = self.pickerStyle.pickerColor;
- _datePicker.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
- // 滚动改变值的响应事件
- [_datePicker addTarget:self action:@selector(didSelectValueChanged:) forControlEvents:UIControlEventValueChanged];
- }
- return _datePicker;
- }
- #pragma mark - 日期选择器2
- - (UIPickerView *)pickerView {
- if (!_pickerView) {
- CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
- _pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight)];
- _pickerView.backgroundColor = self.pickerStyle.pickerColor;
- _pickerView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
- _pickerView.dataSource = self;
- _pickerView.delegate = self;
- }
- return _pickerView;
- }
- #pragma mark - UIPickerViewDataSource
- // 1.设置 pickerView 的列数
- - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
- if (self.pickerMode == BRDatePickerModeYMDHMS) {
- return 6;
- } else if (self.pickerMode == BRDatePickerModeYMDHM) {
- return 5;
- } else if (self.pickerMode == BRDatePickerModeYMDH) {
- return 4;
- } else if (self.pickerMode == BRDatePickerModeMDHM) {
- return 4;
- } else if (self.pickerMode == BRDatePickerModeYMD) {
- return 3;
- } else if (self.pickerMode == BRDatePickerModeYM) {
- return 2;
- } else if (self.pickerMode == BRDatePickerModeY) {
- return 1;
- } else if (self.pickerMode == BRDatePickerModeMD) {
- return 2;
- } else if (self.pickerMode == BRDatePickerModeHMS) {
- return 3;
- } else if (self.pickerMode == BRDatePickerModeHM) {
- return 2;
- } else if (self.pickerMode == BRDatePickerModeMS) {
- return 2;
- } else if (self.pickerMode == BRDatePickerModeYMW) {
- return 3;
- } else if (self.pickerMode == BRDatePickerModeYW) {
- return 2;
- } else if (self.pickerMode == BRDatePickerModeYQ) {
- return 2;
- }
- return 0;
- }
- // 2.设置 pickerView 每列的行数
- - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
- NSArray *rowsArr = [NSArray array];
- if (self.pickerMode == BRDatePickerModeYMDHMS) {
- rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count), @(self.minuteArr.count), @(self.secondArr.count)];
- } else if (self.pickerMode == BRDatePickerModeYMDHM) {
- rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count), @(self.minuteArr.count)];
- } else if (self.pickerMode == BRDatePickerModeYMDH) {
- rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count)];
- } else if (self.pickerMode == BRDatePickerModeMDHM) {
- rowsArr = @[@(self.monthArr.count), @(self.dayArr.count), @(self.hourArr.count), @(self.minuteArr.count)];
- } else if (self.pickerMode == BRDatePickerModeYMD) {
- if ([self.pickerStyle.language hasPrefix:@"zh"]) {
- rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.dayArr.count)];
- } else {
- rowsArr = @[@(self.dayArr.count), @(self.monthArr.count), @(self.yearArr.count)];
- }
- } else if (self.pickerMode == BRDatePickerModeYM) {
- if ([self.pickerStyle.language hasPrefix:@"zh"]) {
- rowsArr = @[@(self.yearArr.count), @(self.monthArr.count)];
- } else {
- rowsArr = @[@(self.monthArr.count), @(self.yearArr.count)];
- }
- } else if (self.pickerMode == BRDatePickerModeY) {
- rowsArr = @[@(self.yearArr.count)];
- } else if (self.pickerMode == BRDatePickerModeMD) {
- rowsArr = @[@(self.monthArr.count), @(self.dayArr.count)];
- } else if (self.pickerMode == BRDatePickerModeHMS) {
- rowsArr = @[@(self.hourArr.count), @(self.minuteArr.count), @(self.secondArr.count)];
- } else if (self.pickerMode == BRDatePickerModeHM) {
- rowsArr = @[@(self.hourArr.count), @(self.minuteArr.count)];
- } else if (self.pickerMode == BRDatePickerModeMS) {
- rowsArr = @[@(self.minuteArr.count), @(self.secondArr.count)];
- } else if (self.pickerMode == BRDatePickerModeYMW) {
- rowsArr = @[@(self.yearArr.count), @(self.monthArr.count), @(self.monthWeekArr.count)];
- } else if (self.pickerMode == BRDatePickerModeYW) {
- rowsArr = @[@(self.yearArr.count), @(self.yearWeekArr.count)];
- } else if (self.pickerMode == BRDatePickerModeYQ) {
- rowsArr = @[@(self.yearArr.count), @(self.quarterArr.count)];
- }
- if (component >= 0 && component < rowsArr.count) {
- return [rowsArr[component] integerValue];
- }
- return 0;
- }
- #pragma mark - UIPickerViewDelegate
- // 3. 设置 pickerView 的显示内容
- - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view {
- // 1.自定义 row 的内容视图
- UILabel *label = (UILabel *)view;
- if (!label) {
- label = [[UILabel alloc]init];
- label.backgroundColor = [UIColor clearColor];
- label.textAlignment = NSTextAlignmentCenter;
- label.font = self.pickerStyle.pickerTextFont;
- label.textColor = self.pickerStyle.pickerTextColor;
- // 字体自适应属性
- label.adjustsFontSizeToFitWidth = YES;
- // 自适应最小字体缩放比例
- label.minimumScaleFactor = 0.5f;
- }
- label.text = [self pickerView:pickerView titleForRow:row forComponent:component];
-
- // 2.设置选择器中间选中行的样式
- [self.pickerStyle setupPickerSelectRowStyle:pickerView titleForRow:row forComponent:component];
- return label;
- }
- - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
- NSString *titleString = @"";
- if (self.pickerMode == BRDatePickerModeYMDHMS) {
- if (component == 0) {
- titleString = [self getYearText:self.yearArr row:row];
- } else if (component == 1) {
- titleString = [self getMonthText:self.monthArr row:row];
- } else if (component == 2) {
- titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
- } else if (component == 3) {
- titleString = [self getHourText:self.hourArr row:row];
- } else if (component == 4) {
- titleString = [self getMinuteText:self.minuteArr row:row];
- } else if (component == 5) {
- titleString = [self getSecondText:self.secondArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeYMDHM) {
- if (component == 0) {
- titleString = [self getYearText:self.yearArr row:row];
- } else if (component == 1) {
- titleString = [self getMonthText:self.monthArr row:row];
- } else if (component == 2) {
- titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
- } else if (component == 3) {
- titleString = [self getHourText:self.hourArr row:row];
- } else if (component == 4) {
- titleString = [self getMinuteText:self.minuteArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeYMDH) {
- if (component == 0) {
- titleString = [self getYearText:self.yearArr row:row];;
- } else if (component == 1) {
- titleString = [self getMonthText:self.monthArr row:row];
- } else if (component == 2) {
- titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
- } else if (component == 3) {
- titleString = [self getHourText:self.hourArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeMDHM) {
- if (component == 0) {
- titleString = [self getMonthText:self.monthArr row:row];
- } else if (component == 1) {
- titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
- } else if (component == 2) {
- titleString = [self getHourText:self.hourArr row:row];
- } else if (component == 3) {
- titleString = [self getMinuteText:self.minuteArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeYMD) {
- if (component == 0) {
- titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getYearText:self.yearArr row:row] : [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
- } else if (component == 1) {
- titleString = [self getMonthText:self.monthArr row:row];
- } else if (component == 2) {
- titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate] : [self getYearText:self.yearArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeYM) {
- if (component == 0) {
- titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getYearText:self.yearArr row:row] : [self getMonthText:self.monthArr row:row];
- } else if (component == 1) {
- titleString = [self.pickerStyle.language hasPrefix:@"zh"] ? [self getMonthText:self.monthArr row:row] : [self getYearText:self.yearArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeY) {
- if (component == 0) {
- titleString = [self getYearText:self.yearArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeMD) {
- if (component == 0) {
- titleString = [self getMonthText:self.monthArr row:row];
- } else if (component == 1) {
- titleString = [self getDayText:self.dayArr row:row mSelectDate:self.mSelectDate];
- }
- } else if (self.pickerMode == BRDatePickerModeHMS) {
- if (component == 0) {
- titleString = [self getHourText:self.hourArr row:row];
- } else if (component == 1) {
- titleString = [self getMinuteText:self.minuteArr row:row];
- } else if (component == 2) {
- titleString = [self getSecondText:self.secondArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeHM) {
- if (component == 0) {
- titleString = [self getHourText:self.hourArr row:row];
- } else if (component == 1) {
- titleString = [self getMinuteText:self.minuteArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeMS) {
- if (component == 0) {
- titleString = [self getMinuteText:self.minuteArr row:row];
- } else if (component == 1) {
- titleString = [self getSecondText:self.secondArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeYMW) {
- if (component == 0) {
- titleString = [self getYearText:self.yearArr row:row];
- } else if (component == 1) {
- titleString = [self getMonthText:self.monthArr row:row];
- } else if (component == 2) {
- titleString = [self getWeekText:self.monthWeekArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeYW) {
- if (component == 0) {
- titleString = [self getYearText:self.yearArr row:row];
- } else if (component == 1) {
- titleString = [self getWeekText:self.yearWeekArr row:row];
- }
- } else if (self.pickerMode == BRDatePickerModeYQ) {
- if (component == 0) {
- titleString = [self getYearText:self.yearArr row:row];
- } else if (component == 1) {
- titleString = [self getQuarterText:self.quarterArr row:row];
- }
- }
-
- return titleString;
- }
- // 4.滚动 pickerView 执行的回调方法
- - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
- NSString *lastSelectValue = self.mSelectValue;
- NSDate *lastSelectDate = self.mSelectDate;
- if (self.pickerMode == BRDatePickerModeYMDHMS) {
- if (component == 0) {
- self.yearIndex = row;
- [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:YES updateMinute:YES updateSecond:YES];
- [self.pickerView reloadComponent:1];
- [self.pickerView reloadComponent:2];
- [self.pickerView reloadComponent:3];
- [self.pickerView reloadComponent:4];
- [self.pickerView reloadComponent:5];
- } else if (component == 1) {
- self.monthIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:YES updateSecond:YES];
- [self.pickerView reloadComponent:2];
- [self.pickerView reloadComponent:3];
- [self.pickerView reloadComponent:4];
- [self.pickerView reloadComponent:5];
- } else if (component == 2) {
- self.dayIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:YES updateSecond:YES];
- [self.pickerView reloadComponent:3];
- [self.pickerView reloadComponent:4];
- [self.pickerView reloadComponent:5];
- } else if (component == 3) {
- self.hourIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:YES];
- [self.pickerView reloadComponent:4];
- [self.pickerView reloadComponent:5];
- } else if (component == 4) {
- self.minuteIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:YES];
- [self.pickerView reloadComponent:5];
- } else if (component == 5) {
- self.secondIndex = row;
- }
-
- NSString *yearString = [self getYearString];
- if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
- if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count * self.minuteArr.count * self.secondArr.count == 0) return;
- int year = [[self getYearString] intValue];
- int month = [[self getMonthString] intValue];
- int day = [[self getDayString] intValue];
- int hour = [[self getHourString] intValue];
- int minute = [[self getMinuteString] intValue];
- int second = [[self getSecondString] intValue];
- self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour minute:minute second:second];
- self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([yearString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([yearString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
-
- } else if (self.pickerMode == BRDatePickerModeYMDHM) {
- if (component == 0) {
- self.yearIndex = row;
- [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:YES updateMinute:YES updateSecond:NO];
- [self.pickerView reloadComponent:1];
- [self.pickerView reloadComponent:2];
- [self.pickerView reloadComponent:3];
- [self.pickerView reloadComponent:4];
- } else if (component == 1) {
- self.monthIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:YES updateSecond:NO];
- [self.pickerView reloadComponent:2];
- [self.pickerView reloadComponent:3];
- [self.pickerView reloadComponent:4];
- } else if (component == 2) {
- self.dayIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:YES updateSecond:NO];
- [self.pickerView reloadComponent:3];
- [self.pickerView reloadComponent:4];
- } else if (component == 3) {
- self.hourIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:NO];
- [self.pickerView reloadComponent:4];
- } else if (component == 4) {
- self.minuteIndex = row;
- }
-
- NSString *yearString = [self getYearString];
- if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
- if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count * self.minuteArr.count == 0) return;
- int year = [[self getYearString] intValue];
- int month = [[self getMonthString] intValue];
- int day = [[self getDayString] intValue];
- int hour = [[self getHourString] intValue];
- int minute = [[self getMinuteString] intValue];
- self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour minute:minute];
- self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d", year, month, day, hour, minute];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([yearString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([yearString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
-
- } else if (self.pickerMode == BRDatePickerModeYMDH) {
- if (component == 0) {
- self.yearIndex = row;
- [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:YES updateMinute:NO updateSecond:NO];
- [self.pickerView reloadComponent:1];
- [self.pickerView reloadComponent:2];
- [self.pickerView reloadComponent:3];
- } else if (component == 1) {
- self.monthIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:NO updateSecond:NO];
- [self.pickerView reloadComponent:2];
- [self.pickerView reloadComponent:3];
- } else if (component == 2) {
- self.dayIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:NO updateSecond:NO];
- [self.pickerView reloadComponent:3];
- } else if (component == 3) {
- self.hourIndex = row;
- }
-
- NSString *yearString = [self getYearString];
- if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
- if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count == 0) return;
- int year = [[self getYearString] intValue];
- int month = [[self getMonthString] intValue];
- int day = [[self getDayString] intValue];
- int hour = 0;
- if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) {
- hour = (self.hourIndex == 0 ? 0 : 12);
- self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %@", year, month, day, [self getHourString]];
- } else {
- hour = [[self getHourString] intValue];
- self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d %02d", year, month, day, hour];
- }
- self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([yearString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([yearString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
-
- } else if (self.pickerMode == BRDatePickerModeMDHM) {
- if (component == 0) {
- self.monthIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:YES updateMinute:YES updateSecond:NO];
- [self.pickerView reloadComponent:1];
- [self.pickerView reloadComponent:2];
- [self.pickerView reloadComponent:3];
- } else if (component == 1) {
- self.dayIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:YES updateMinute:YES updateSecond:NO];
- [self.pickerView reloadComponent:2];
- [self.pickerView reloadComponent:3];
- } else if (component == 2) {
- self.hourIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:NO];
- [self.pickerView reloadComponent:3];
- } else if (component == 3) {
- self.minuteIndex = row;
- }
-
- NSString *monthString = [self getMonthString];
- if (![monthString isEqualToString:self.lastRowContent] && ![monthString isEqualToString:self.firstRowContent]) {
- if (self.yearArr.count * self.monthArr.count * self.dayArr.count * self.hourArr.count * self.minuteArr.count == 0) return;
- int year = [[self getYearString] intValue];
- int month = [[self getMonthString] intValue];
- int day = [[self getDayString] intValue];
- int hour = [[self getHourString] intValue];
- int minute = [[self getMinuteString] intValue];
- self.mSelectDate = [NSDate br_setYear:year month:month day:day hour:hour minute:minute];
- self.mSelectValue = [NSString stringWithFormat:@"%02d-%02d %02d:%02d", month, day, hour, minute];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([monthString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([monthString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
-
- } else if (self.pickerMode == BRDatePickerModeYMD) {
- if (component == 0) {
- if ([self.pickerStyle.language hasPrefix:@"zh"]) {
- self.yearIndex = row;
- [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO];
- [self.pickerView reloadComponent:1];
- [self.pickerView reloadComponent:2];
- } else {
- self.dayIndex = row;
- }
- } else if (component == 1) {
- self.monthIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO];
- if ([self.pickerStyle.language hasPrefix:@"zh"]) {
- [self.pickerView reloadComponent:2];
- } else {
- [self.pickerView reloadComponent:0];
- }
- } else if (component == 2) {
- if ([self.pickerStyle.language hasPrefix:@"zh"]) {
- self.dayIndex = row;
- } else {
- self.yearIndex = row;
- [self reloadDateArrayWithUpdateMonth:YES updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO];
- [self.pickerView reloadComponent:0];
- [self.pickerView reloadComponent:1];
- }
- }
-
- NSString *yearString = [self getYearString];
- if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
- if (self.yearArr.count * self.monthArr.count * self.dayArr.count == 0) return;
- int year = [[self getYearString] intValue];
- int month = [[self getMonthString] intValue];
- int day = [[self getDayString] intValue];
- self.mSelectDate = [NSDate br_setYear:year month:month day:day];
- self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d", year, month, day];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([yearString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([yearString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
-
- } else if (self.pickerMode == BRDatePickerModeYM) {
- if (component == 0) {
- if ([self.pickerStyle.language hasPrefix:@"zh"]) {
- self.yearIndex = row;
- [self reloadDateArrayWithUpdateMonth:YES updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO];
- [self.pickerView reloadComponent:1];
- } else {
- self.monthIndex = row;
- }
- } else if (component == 1) {
- if ([self.pickerStyle.language hasPrefix:@"zh"]) {
- self.monthIndex = row;
- } else {
- self.yearIndex = row;
- [self reloadDateArrayWithUpdateMonth:YES updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO];
- [self.pickerView reloadComponent:0];
- }
- }
-
- NSString *yearString = [self getYearString];
- if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
- if (self.yearArr.count * self.monthArr.count == 0) return;
- int year = [[self getYearString] intValue];
- int month = [[self getMonthString] intValue];
- self.mSelectDate = [NSDate br_setYear:year month:month];
- self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d", year, month];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([yearString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([yearString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
- } else if (self.pickerMode == BRDatePickerModeY) {
- if (component == 0) {
- self.yearIndex = row;
- }
-
- NSString *yearString = [self getYearString];
- if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
- if (self.yearArr.count == 0) return;
- int year = [[self getYearString] intValue];
- self.mSelectDate = [NSDate br_setYear:year];
- self.mSelectValue = [NSString stringWithFormat:@"%04d", year];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([yearString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([yearString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
-
- } else if (self.pickerMode == BRDatePickerModeMD) {
- if (component == 0) {
- self.monthIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:YES updateHour:NO updateMinute:NO updateSecond:NO];
- [self.pickerView reloadComponent:1];
- } else if (component == 1) {
- self.dayIndex = row;
- }
-
- NSString *monthString = [self getMonthString];
- if (![monthString isEqualToString:self.lastRowContent] && ![monthString isEqualToString:self.firstRowContent]) {
- if (self.yearArr.count * self.monthArr.count * self.dayArr.count == 0) return;
- int year = [[self getYearString] intValue];
- int month = [[self getMonthString] intValue];
- int day = [[self getDayString] intValue];
- self.mSelectDate = [NSDate br_setYear:year month:month day:day];
- self.mSelectValue = [NSString stringWithFormat:@"%02d-%02d", month, day];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([monthString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([monthString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
-
- } else if (self.pickerMode == BRDatePickerModeHMS) {
- if (component == 0) {
- self.hourIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:YES];
- [self.pickerView reloadComponent:1];
- [self.pickerView reloadComponent:2];
- } else if (component == 1) {
- self.minuteIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:YES];
- [self.pickerView reloadComponent:2];
- } else if (component == 2) {
- self.secondIndex = row;
- }
-
- NSString *hourString = [self getHourString];
- if (![hourString isEqualToString:self.lastRowContent] && ![hourString isEqualToString:self.firstRowContent]) {
- if (self.hourArr.count * self.minuteArr.count * self.secondArr.count == 0) return;
- int hour = [[self getHourString] intValue];
- int minute = [[self getMinuteString] intValue];
- int second = [[self getSecondString] intValue];
- self.mSelectDate = [NSDate br_setHour:hour minute:minute second:second];
- self.mSelectValue = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, minute, second];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([hourString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([hourString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
-
- } else if (self.pickerMode == BRDatePickerModeHM) {
- if (component == 0) {
- self.hourIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:YES updateSecond:NO];
- [self.pickerView reloadComponent:1];
- } else if (component == 1) {
- self.minuteIndex = row;
- }
-
- NSString *hourString = [self getHourString];
- if (![hourString isEqualToString:self.lastRowContent] && ![hourString isEqualToString:self.firstRowContent]) {
- if (self.hourArr.count * self.minuteArr.count == 0) return;
- int hour = [[self getHourString] intValue];
- int minute = [[self getMinuteString] intValue];
- self.mSelectDate = [NSDate br_setHour:hour minute:minute];
- self.mSelectValue = [NSString stringWithFormat:@"%02d:%02d", hour, minute];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([hourString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([hourString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
- } else if (self.pickerMode == BRDatePickerModeMS) {
- if (component == 0) {
- self.minuteIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:YES];
- [self.pickerView reloadComponent:1];
- } else if (component == 1) {
- self.secondIndex = row;
- }
-
- NSString *minuteString = [self getMinuteString];
- if (![minuteString isEqualToString:self.lastRowContent] && ![minuteString isEqualToString:self.firstRowContent]) {
- if (self.minuteArr.count * self.secondArr.count == 0) return;
- int minute = [[self getMinuteString] intValue];
- int second = [[self getSecondString] intValue];
- self.mSelectDate = [NSDate br_setMinute:minute second:second];
- self.mSelectValue = [NSString stringWithFormat:@"%02d:%02d", minute, second];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([minuteString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([minuteString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
- } else if (self.pickerMode == BRDatePickerModeYMW) {
- if (component == 0) {
- self.yearIndex = row;
- [self reloadDateArrayWithUpdateMonth:YES updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO updateWeekOfMonth:YES updateWeekOfYear:NO updateQuarter:NO];
- [self.pickerView reloadComponent:1];
- [self.pickerView reloadComponent:2];
- } else if (component == 1) {
- self.monthIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO updateWeekOfMonth:YES updateWeekOfYear:NO updateQuarter:NO];
- [self.pickerView reloadComponent:2];
- } else if (component == 2) {
- self.monthWeekIndex = row;
- }
-
- NSString *yearString = [self getYearString];
- if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
- if (self.yearArr.count * self.monthArr.count * self.monthWeekArr.count == 0) return;
- int year = [[self getYearString] intValue];
- int month = [[self getMonthString] intValue];
- int week = [[self getMonthWeekString] intValue];
- self.mSelectDate = [NSDate br_setYear:year month:month weekOfMonth:week];
- self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d-%02d", year, month, week];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([yearString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([yearString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
- } else if (self.pickerMode == BRDatePickerModeYW) {
- if (component == 0) {
- self.yearIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO updateWeekOfMonth:NO updateWeekOfYear:YES updateQuarter:NO];
- [self.pickerView reloadComponent:1];
- } else if (component == 1) {
- self.yearWeekIndex = row;
- }
-
- NSString *yearString = [self getYearString];
- if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
- if (self.yearArr.count * self.monthArr.count * self.monthWeekArr.count == 0) return;
- int year = [[self getYearString] intValue];
- int week = [[self getYearWeekString] intValue];
- self.mSelectDate = [NSDate br_setYear:year weekOfYear:week];
- self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d", year, week];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([yearString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([yearString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
- } else if (self.pickerMode == BRDatePickerModeYQ) {
- if (component == 0) {
- self.yearIndex = row;
- [self reloadDateArrayWithUpdateMonth:NO updateDay:NO updateHour:NO updateMinute:NO updateSecond:NO updateWeekOfMonth:NO updateWeekOfYear:NO updateQuarter:YES];
- [self.pickerView reloadComponent:1];
- } else if (component == 1) {
- self.quarterIndex = row;
- }
-
- NSString *yearString = [self getYearString];
- if (![yearString isEqualToString:self.lastRowContent] && ![yearString isEqualToString:self.firstRowContent]) {
- if (self.yearArr.count * self.monthArr.count * self.monthWeekArr.count == 0) return;
- int year = [[self getYearString] intValue];
- int quarter = [[self getQuarterString] intValue];
- self.mSelectDate = [NSDate br_setYear:year quarter:quarter];
- self.mSelectValue = [NSString stringWithFormat:@"%04d-%02d", year, quarter];
- } else {
- self.mSelectDate = self.addToNow ? [NSDate date] : nil;
- if ([yearString isEqualToString:self.lastRowContent]) {
- self.mSelectValue = self.lastRowContent;
- } else if ([yearString isEqualToString:self.firstRowContent]) {
- self.mSelectValue = self.firstRowContent;
- }
- }
- }
-
- // 纠正选择日期(解决:由【自定义字符串】滚动到 其它日期时,或设置 minDate,日期联动不正确问题)
- BOOL isLastRowContent = [lastSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.firstRowContent];
- BOOL isFirstRowContent = [lastSelectValue isEqualToString:self.firstRowContent] && ![self.mSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.firstRowContent];
- if (isLastRowContent || isFirstRowContent || _isAdjustSelectRow) {
- [self scrollToSelectDate:self.mSelectDate animated:NO];
- }
-
- // 禁止选择日期:回滚到上次选择的日期
- if (self.nonSelectableDates && self.nonSelectableDates.count > 0 && ![self.mSelectValue isEqualToString:self.lastRowContent] && ![self.mSelectValue isEqualToString:self.firstRowContent]) {
- for (NSDate *date in self.nonSelectableDates) {
- if ([self br_compareDate:date targetDate:self.mSelectDate dateFormat:self.dateFormatter] == NSOrderedSame) {
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- // 如果当前的日期不可选择,就回滚到上次选择的日期
- [self scrollToSelectDate:lastSelectDate animated:YES];
- });
- // 不可选择日期的回调
- if (self.nonSelectableBlock) {
- self.nonSelectableBlock(self.mSelectDate, self.mSelectValue);
- }
- self.mSelectDate = lastSelectDate;
- self.mSelectValue = lastSelectValue;
- break;
- }
- }
- }
-
- // 滚动选择时执行 changeBlock 回调
- if (self.changeBlock) {
- self.changeBlock(self.mSelectDate, self.mSelectValue);
- }
-
- // 滚动选择范围时执行 changeBlock 回调
- if (self.changeRangeBlock) {
- self.changeRangeBlock(self.getSelectRangeDate.firstObject, self.getSelectRangeDate.lastObject, self.mSelectValue);
- }
-
- // 设置自动选择时,滚动选择时就执行 resultBlock
- if (self.isAutoSelect) {
- // 滚动完成后,执行block回调
- if (self.resultBlock) {
- self.resultBlock(self.mSelectDate, self.mSelectValue);
- }
- if (self.resultRangeBlock) {
- self.resultRangeBlock(self.getSelectRangeDate.firstObject, self.getSelectRangeDate.lastObject, self.mSelectValue);
- }
- }
- }
- // 设置行高
- - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
- return self.pickerStyle.rowHeight;
- }
- #pragma mark - 日期选择器1 滚动后的响应事件
- - (void)didSelectValueChanged:(UIDatePicker *)sender {
- // 读取日期:datePicker.date
- self.mSelectDate = sender.date;
-
- if (_datePickerMode != UIDatePickerModeCountDownTimer) {
- BOOL selectLessThanMin = [self br_compareDate:self.mSelectDate targetDate:self.minDate dateFormat:self.dateFormatter] == NSOrderedAscending;
- BOOL selectMoreThanMax = [self br_compareDate:self.mSelectDate targetDate:self.maxDate dateFormat:self.dateFormatter] == NSOrderedDescending;
- if (selectLessThanMin) {
- self.mSelectDate = self.minDate;
- }
- if (selectMoreThanMax) {
- self.mSelectDate = self.maxDate;
- }
- }
-
- [self.datePicker setDate:self.mSelectDate animated:YES];
-
- self.mSelectValue = [self br_stringFromDate:self.mSelectDate dateFormat:self.dateFormatter];
-
- // 滚动选择时执行 changeBlock 回调
- if (self.changeBlock) {
- self.changeBlock(self.mSelectDate, self.mSelectValue);
- }
-
- // 滚动选择范围时执行 changeBlock 回调
- if (self.changeRangeBlock) {
- self.changeRangeBlock(self.getSelectRangeDate.firstObject, self.getSelectRangeDate.lastObject, self.mSelectValue);
- }
-
- // 设置自动选择时,滚动选择时就执行 resultBlock
- if (self.isAutoSelect) {
- // 滚动完成后,执行block回调
- if (self.resultBlock) {
- self.resultBlock(self.mSelectDate, self.mSelectValue);
- }
- if (self.resultRangeBlock) {
- self.resultRangeBlock(self.getSelectRangeDate.firstObject, self.getSelectRangeDate.lastObject, self.mSelectValue);
- }
- }
- }
- #pragma mark - 重写父类方法
- - (void)reloadData {
- // 1.处理数据源
- [self handlerPickerData];
- if (self.style == BRDatePickerStyleSystem) {
- // 2.刷新选择器(重新设置相关值)
- self.datePicker.datePickerMode = _datePickerMode;
- #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130400 // 编译时检查SDK版本,iOS SDK 13.4 以后版本的处理
- if (@available(iOS 13.4, *)) {
- // 适配 iOS14 以后 UIDatePicker 的显示样式
- self.datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
- // 设置 datePicker 的 frame(在iOS14里,UIDatePicker 的 frame 赋值必须放在 datePickerMode 赋值之后, 否则 frame 不会生效)
- CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
- self.datePicker.frame = CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight);
- } else
- #endif
- {
- // Fallback on earlier versions
- }
- // 设置该 UIDatePicker 的国际化 Locale
- self.datePicker.locale = [[NSLocale alloc]initWithLocaleIdentifier:self.pickerStyle.language];
- if (self.timeZone) {
- self.datePicker.timeZone = self.timeZone;
- }
-
- self.datePicker.calendar = self.calendar;
- // 设置农历日期
- //self.datePicker.calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierChinese];
-
- if (self.minDate) {
- self.datePicker.minimumDate = self.minDate;
- }
- if (self.maxDate) {
- self.datePicker.maximumDate = self.maxDate;
- }
- if (_datePickerMode == UIDatePickerModeCountDownTimer && self.countDownDuration > 0) {
- self.datePicker.countDownDuration = self.countDownDuration;
- }
- if (self.minuteInterval > 1) {
- self.datePicker.minuteInterval = self.minuteInterval;
- }
-
- // 3.滚动到选择的日期
- [self.datePicker setDate:self.mSelectDate animated:NO];
- } else if (self.style == BRDatePickerStyleCustom) {
- // 2.刷新选择器
- [self.pickerView reloadAllComponents];
- // 3.滚动到选择的日期
- if (self.selectValue && ([self.selectValue isEqualToString:self.lastRowContent] || [self.selectValue isEqualToString:self.firstRowContent])) {
- [self scrollToCustomString:NO];
- } else {
- [self scrollToSelectDate:self.mSelectDate animated:NO];
- }
- }
- }
- - (void)addPickerToView:(UIView *)view {
- _containerView = view;
- [self setupDateFormatter:self.pickerMode];
- // 1.添加日期选择器
- if (self.style == BRDatePickerStyleSystem) {
- [self setupPickerView:self.datePicker toView:view];
- } else if (self.style == BRDatePickerStyleCustom) {
- [self setupPickerView:self.pickerView toView:view];
- if (self.showUnitType == BRShowUnitTypeOnlyCenter) {
- // 添加日期单位到选择器
- [self addUnitLabel];
- }
- }
-
- // ③添加中间选择行的两条分割线
- if (self.pickerStyle.clearPickerNewStyle) {
- [self.pickerStyle addSeparatorLineView:self.pickerView];
- }
-
- // 2.绑定数据
- [self reloadData];
-
- __weak typeof(self) weakSelf = self;
- self.doneBlock = ^{
- // 点击确定按钮后,执行block回调
- if (weakSelf.resultBlock) {
- weakSelf.resultBlock(weakSelf.mSelectDate, weakSelf.mSelectValue);
- }
- if (weakSelf.resultRangeBlock) {
- weakSelf.resultRangeBlock(weakSelf.getSelectRangeDate.firstObject, weakSelf.getSelectRangeDate.lastObject, weakSelf.mSelectValue);
- }
- };
-
- [super addPickerToView:view];
- }
- #pragma mark - 添加日期单位到选择器
- - (void)addUnitLabel {
- if (self.unitLabelArr.count > 0) {
- for (UILabel *unitLabel in self.unitLabelArr) {
- [unitLabel removeFromSuperview];
- }
- self.unitLabelArr = nil;
- }
- self.unitLabelArr = [self setupPickerUnitLabel:self.pickerView unitArr:self.unitArr];
- }
- #pragma mark - 重写父类方法
- - (void)addSubViewToPicker:(UIView *)customView {
- if (self.style == BRDatePickerStyleSystem) {
- [self.datePicker addSubview:customView];
- } else if (self.style == BRDatePickerStyleCustom) {
- [self.pickerView addSubview:customView];
- }
- }
- #pragma mark - 弹出选择器视图
- - (void)show {
- [self addPickerToView:nil];
- }
- #pragma mark - 关闭选择器视图
- - (void)dismiss {
- [self removePickerFromView:nil];
- }
- #pragma mark - setter 方法
- - (void)setPickerMode:(BRDatePickerMode)pickerMode {
- _pickerMode = pickerMode;
- // 非空,表示二次设置
- if (_datePicker || _pickerView) {
- BRDatePickerStyle lastStyle = self.style;
- [self setupDateFormatter:pickerMode];
- // 系统样式 切换到 自定义样式
- if (lastStyle == BRDatePickerStyleSystem && self.style == BRDatePickerStyleCustom) {
- [self.datePicker removeFromSuperview];
- [self setupPickerView:self.pickerView toView:_containerView];
- }
- // 自定义样式 切换到 系统样式
- if (lastStyle == BRDatePickerStyleCustom && self.style == BRDatePickerStyleSystem) {
- [self.pickerView removeFromSuperview];
- [self setupPickerView:self.datePicker toView:_containerView];
- }
- // 刷新选择器数据
- [self reloadData];
- if (self.style == BRDatePickerStyleCustom && self.showUnitType == BRShowUnitTypeOnlyCenter) {
- // 添加日期单位到选择器
- [self addUnitLabel];
- }
- }
- }
- - (void)setAddToNow:(BOOL)addToNow {
- _addToNow = addToNow;
- if (addToNow) {
- _maxDate = [NSDate date];
- _lastRowContent = [NSBundle br_localizedStringForKey:@"至今" language:self.pickerStyle.language];
- }
- }
- - (void)setLastRowContent:(NSString *)lastRowContent {
- if (!_addToNow) {
- _lastRowContent = lastRowContent;
- }
- }
- // 支持动态设置选择的值
- - (void)setSelectDate:(NSDate *)selectDate {
- _selectDate = selectDate;
- _mSelectDate = selectDate;
- if (_datePicker || _pickerView) {
- // 刷新选择器数据
- [self reloadData];
- }
- }
- - (void)setSelectValue:(NSString *)selectValue {
- _selectValue = selectValue;
- _mSelectValue = selectValue;
- if (_datePicker || _pickerView) {
- // 刷新选择器数据
- [self reloadData];
- }
- }
- - (void)setAddCustomString:(NSString *)addCustomString {
- self.lastRowContent = addCustomString;
- }
- #pragma mark - getter 方法
- - (NSArray *)yearArr {
- if (!_yearArr) {
- _yearArr = [NSArray array];
- }
- return _yearArr;
- }
- - (NSArray *)monthArr {
- if (!_monthArr) {
- _monthArr = [NSArray array];
- }
- return _monthArr;
- }
- - (NSArray *)dayArr {
- if (!_dayArr) {
- _dayArr = [NSArray array];
- }
- return _dayArr;
- }
- - (NSArray *)hourArr {
- if (!_hourArr) {
- _hourArr = [NSArray array];
- }
- return _hourArr;
- }
- - (NSArray *)minuteArr {
- if (!_minuteArr) {
- _minuteArr = [NSArray array];
- }
- return _minuteArr;
- }
- - (NSArray *)secondArr {
- if (!_secondArr) {
- _secondArr = [NSArray array];
- }
- return _secondArr;
- }
- - (NSInteger)minuteInterval {
- if (_minuteInterval < 1 || _minuteInterval > 30) {
- _minuteInterval = 1;
- }
- return _minuteInterval;
- }
- - (NSInteger)secondInterval {
- if (_secondInterval < 1 || _secondInterval > 30) {
- _secondInterval = 1;
- }
- return _secondInterval;
- }
- - (NSArray *)unitArr {
- if (!_unitArr) {
- _unitArr = [NSArray array];
- }
- return _unitArr;
- }
- - (NSArray<UILabel *> *)unitLabelArr {
- if (!_unitLabelArr) {
- _unitLabelArr = [NSArray array];
- }
- return _unitLabelArr;
- }
- - (NSArray<NSString *> *)monthNames {
- if (!_monthNames) {
- _monthNames = [NSArray array];
- }
- return _monthNames;
- }
- - (NSString *)getYearString {
- NSInteger index = 0;
- if (self.yearIndex >= 0 && self.yearIndex < self.yearArr.count) {
- index = self.yearIndex;
- }
- return [self.yearArr objectAtIndex:index];
- }
- - (NSString *)getMonthString {
- NSInteger index = 0;
- if (self.monthIndex >= 0 && self.monthIndex < self.monthArr.count) {
- index = self.monthIndex;
- }
- return [self.monthArr objectAtIndex:index];
- }
- - (NSString *)getDayString {
- NSInteger index = 0;
- if (self.dayIndex >= 0 && self.dayIndex < self.dayArr.count) {
- index = self.dayIndex;
- }
- return [self.dayArr objectAtIndex:index];
- }
- - (NSString *)getHourString {
- NSInteger index = 0;
- if (self.hourIndex >= 0 && self.hourIndex < self.hourArr.count) {
- index = self.hourIndex;
- }
- return [self.hourArr objectAtIndex:index];
- }
- - (NSString *)getMinuteString {
- NSInteger index = 0;
- if (self.minuteIndex >= 0 && self.minuteIndex < self.minuteArr.count) {
- index = self.minuteIndex;
- }
- return [self.minuteArr objectAtIndex:index];
- }
- - (NSString *)getSecondString {
- NSInteger index = 0;
- if (self.secondIndex >= 0 && self.secondIndex < self.secondArr.count) {
- index = self.secondIndex;
- }
- return [self.secondArr objectAtIndex:index];
- }
- - (NSString *)getMonthWeekString {
- NSInteger index = 0;
- if (self.monthWeekIndex >= 0 && self.monthWeekIndex < self.monthWeekArr.count) {
- index = self.monthWeekIndex;
- }
- return [self.monthWeekArr objectAtIndex:index];
- }
- - (NSString *)getYearWeekString {
- NSInteger index = 0;
- if (self.yearWeekIndex >= 0 && self.yearWeekIndex < self.yearWeekArr.count) {
- index = self.yearWeekIndex;
- }
- return [self.yearWeekArr objectAtIndex:index];
- }
- - (NSString *)getQuarterString {
- NSInteger index = 0;
- if (self.quarterIndex >= 0 && self.quarterIndex < self.quarterArr.count) {
- index = self.quarterIndex;
- }
- return [self.quarterArr objectAtIndex:index];
- }
- #pragma mark - 获取选中日期范围
- - (NSArray<NSDate *> *)getSelectRangeDate {
- NSDate *startDate, *endDate = nil;
- switch (self.pickerMode) {
- case BRDatePickerModeYMDHMS:
- case BRDatePickerModeMS:
- case BRDatePickerModeHMS:
- {
- endDate = self.mSelectDate;
- startDate = self.mSelectDate;
- }
- break;
- case BRDatePickerModeYMDHM:
- case BRDatePickerModeMDHM:
- case BRDatePickerModeHM:
- case BRDatePickerModeDateAndTime:
- case BRDatePickerModeTime:
- {
- NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
- startDate = tempDate;
- endDate = [tempDate dateByAddingTimeInterval:59];
- }
- break;
- case BRDatePickerModeYMDH:
- {
- NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
- startDate = tempDate;
- endDate = [tempDate dateByAddingTimeInterval:60 * 59 + 59];
- }
- break;
- case BRDatePickerModeMD:
- case BRDatePickerModeYMD:
- case BRDatePickerModeDate:
- {
- NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
- startDate = tempDate;
- endDate = [[tempDate br_getNewDateToDays:1] dateByAddingTimeInterval:-1];
- }
- break;
- case BRDatePickerModeYM:
- {
- NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
- startDate = tempDate;
- endDate = [[tempDate br_getNewDateToMonths:1] dateByAddingTimeInterval:-1];
- }
- break;
- case BRDatePickerModeY:
- {
- NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
- startDate = tempDate;
- endDate = [[tempDate br_getNewDateToMonths:12] dateByAddingTimeInterval:-1];
- }
- break;
- case BRDatePickerModeYMW:
- case BRDatePickerModeYW:
- {
- NSDate *tempDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
- endDate = [tempDate dateByAddingTimeInterval:-1];
- startDate = [tempDate br_getNewDateToDays:-7];
- }
- break;
- case BRDatePickerModeYQ:
- {
- startDate = [self br_dateFromString:self.mSelectValue dateFormat:self.dateFormatter];
- endDate = [[startDate br_getNewDateToMonths:3] dateByAddingTimeInterval:-1];
- }
- break;
-
- default:
- break;
- }
-
- NSMutableArray *dataArr = [NSMutableArray array];
- if (startDate)
- [dataArr addObject:startDate];
- if (endDate)
- [dataArr addObject:endDate];
- return dataArr;
- }
- @end
|