Skip to content

Commit d9ce430

Browse files
committed
日期选择器添加nonSelectableDates属性 #178
1 parent 24dd0b0 commit d9ce430

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

BRPickerView/DatePickerView/BRDatePickerView.h

+3
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ typedef void (^BRDateResultBlock)(NSDate * _Nullable selectDate, NSString * _Nul
138138
/** 设置时区,默认为当前时区 */
139139
@property (nullable, nonatomic, copy) NSTimeZone *timeZone;
140140

141+
/** 指定不允许选择的日期 */
142+
@property (nullable, nonatomic, copy) NSArray <NSDate *> *nonSelectableDates;
143+
141144
/// 初始化时间选择器
142145
/// @param pickerMode 日期选择器显示类型
143146
- (instancetype)initWithPickerMode:(BRDatePickerMode)pickerMode;

BRPickerView/DatePickerView/BRDatePickerView.m

+14
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,7 @@ - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row f
737737
// 4.滚动 pickerView 执行的回调方法
738738
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
739739
NSString *lastSelectValue = self.mSelectValue;
740+
NSDate *lastSelectDate = self.mSelectDate;
740741
if (self.pickerMode == BRDatePickerModeYMDHMS) {
741742
if (component == 0) {
742743
self.yearIndex = row;
@@ -1082,6 +1083,19 @@ - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComp
10821083
}
10831084
}
10841085

1086+
// 过滤不可选择日期
1087+
if (self.nonSelectableDates && self.nonSelectableDates.count > 0 && ![self.mSelectValue isEqualToString:self.addCustomString]) {
1088+
for (NSDate *date in self.nonSelectableDates) {
1089+
if ([self br_compareDate:date targetDate:self.mSelectDate dateFormat:self.dateFormatter] == NSOrderedSame) {
1090+
// 如果当前的日期不可选择,就回滚到上次选择的日期
1091+
[self scrollToSelectDate:lastSelectDate animated:YES];
1092+
self.mSelectDate = lastSelectDate;
1093+
self.mSelectValue = lastSelectValue;
1094+
break;
1095+
}
1096+
}
1097+
}
1098+
10851099
// 由 【自定义字符串】 滚动到 其它时间时,回滚到上次选择的位置
10861100
if ([lastSelectValue isEqualToString:self.addCustomString] && ![self.mSelectValue isEqualToString:self.addCustomString]) {
10871101
[self scrollToSelectDate:self.mSelectDate animated:NO];

BRPickerViewDemo/Classes/Demo/Controller/TestViewController.m

+3-1
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,9 @@ - (void)handlerTextFieldSelect:(UITextField *)textField {
310310
datePickerView.maxDate = [NSDate br_setYear:2022 month:10 day:20];
311311
datePickerView.isAutoSelect = YES;
312312
datePickerView.addCustomString = @"自定义";
313-
//datePickerView.keyView = self.view; // 也可将组件 datePickerView 添加到 self.view 上,默认是添加到 keyWindow 上
313+
// 指定不可选择的日期
314+
// datePickerView.nonSelectableDates = @[[NSDate br_setYear:2020 month:8 day:25], [NSDate br_setYear:2020 month:8 day:28]];
315+
// datePickerView.keyView = self.view; // 将组件 datePickerView 添加到 self.view 上,默认是添加到 keyWindow 上
314316
datePickerView.resultBlock = ^(NSDate *selectDate, NSString *selectValue) {
315317
self.birthdaySelectDate = selectDate;
316318
self.infoModel.birthdayStr = selectValue;

0 commit comments

Comments
 (0)