前言
- 支持修改筛选的时间纬度精确到时分秒
- 支持设置默认选中的时间
I 时间选择器
pod 'PGDatePicker' ,'2.6.9'
1.1 用法
- 初始化datePick
- (PGDatePickManager *)datePickManager{
if (nil == _datePickManager) {
PGDatePickManager *datePickManager = [[PGDatePickManager alloc]init];
_datePickManager = datePickManager;
datePickManager.isShadeBackground = true;
PGDatePicker *datePicker = datePickManager.datePicker;
datePicker.delegate = self;
datePicker.datePickerType = PGDatePickerTypeLine;
datePicker.isHiddenMiddleText = false;
// datePicker.datePickerMode = PGDatePickerModeDateHourMinute;
datePicker.datePickerMode = PGDatePickerModeDate;
datePickManager.cancelButtonText = QCTLocal(@"myclear_cache");
datePickManager.datePicker.textColorOfSelectedRow = rgb(51,51,51);
datePickManager.titleLabel.textColor = rgb(51,51,51);
datePickManager.datePicker.lineBackgroundColor = k_tableView_Line;
datePickManager.confirmButtonTextColor = BASE_RED_COLOR;
}
return
- 点击日期控件弹出日期选择器
false
- 监听时间的选择
PGDatePickerDelegate
- (void)datePicker:(PGDatePicker *)datePicker didSelectDate:(NSDateComponents *)dateComponents {
NSString * string = nil;
NSDate * date =[NSDate setYear:dateComponents.year month:dateComponents.month day:dateComponents.day hour:dateComponents.hour minute:dateComponents.minute];
switch (datePicker.datePickerMode) {//PGDatePickerModeDate
case PGDatePickerModeDate://PGDatePickerModeDate
{
// NSString * string =[self dateFormattingWithDate:date toFormate:@"YYYY-MM-dd HH:mm"];
string =[QCT_Common date4YYMMDD:date];
}
break;
default:
{
// NSDate * date =[NSDate setYear:dateComponents.year month:dateComponents.month day:dateComponents.day hour:dateComponents.hour minute:dateComponents.minute];
// NSString * string =[self dateFormattingWithDate:date toFormate:@"YYYY-MM-dd HH:mm"];
string =[QCT_Common date:date];
}
break;
}
// if( == ){
//
//
// }else if (<#expression#>)
NSLog(@"date = %@", string);
switch (self.filterViewModel.timeModel.type) {
case QCTsubFilterTimeViewModelType4Statr:
{
self.filterViewModel.timeModel.startStr = string;
self.filterViewModel.timeModel.isclearstartStr = NO;
}
break;
case QCTsubFilterTimeViewModelType4End:
{
//
// NSString * Title= [NSString stringWithFormat:@"%02ld-%02ld-%02ld",(long)dateComponents.year,(long)dateComponents.month,(long)dateComponents.day];
self.filterViewModel.timeModel.isclearendStr = NO;
self.filterViewModel.timeModel.endStr = string;
}
break;
default:
break;
}
[self.filterViewModel.reloadSubject sendNext:nil];
}
1.2 设置默认选中的时间
注意时间的格式是yyyy-MM-dd"
还是yyyy-MM-dd HH:mm"
,如果格式错误,获取的date将是nil。
- (void)dateSelect:(UIButton *)btn
{
// 传入时间,进行默认选中特定时间
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];// 注意
NSDate *date ;
if(btn.tag == 0){
date = [dateFormatter dateFromString: staStr];
}else {
date = [dateFormatter dateFromString: endStr];
}
[datePicker setDate:date animated:false];
}
封装格式转换
+ (NSDate*)dateWithFormatterString:(NSString*)dateWithString{
NSDate *date = [self dateWithFormatterString:dateWithString dateFormat:@"yyyy-MM-dd HH:mm"];
return date;
}
+ (NSDate*)dateWithFormatterStringyyyyMMDD:(NSString*)dateWithString{
NSDate *date = [self dateWithFormatterString:dateWithString dateFormat:@"yyyy-MM-dd"];
return date;
}
+ (NSDate*)dateWithFormatterStringyyyyMMDDhhmmss:(NSString*)dateWithString{
NSDate *date = [self dateWithFormatterString:dateWithString dateFormat:@"yyyy-MM-dd HH:mm:ss"];
return date;
}
+ (NSDate*)dateWithFormatterString:(NSString*)dateWithString dateFormat:(NSString*)dateFormat {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
dateFormatter.dateFormat = dateFormat;
NSDate *date = [dateFormatter dateFromString:dateWithString];
return
1.3 适配iOS12系统上日期视图被筛选视图遮挡问题
背景:为了适配iOS12系统上日期视图被筛选视图遮挡问题
方案:修改第三方日期视图的层级
修改PGDatePickManager,在viewWillLayoutSubviews将contentView和dismissView添加到keyWindow
由于是第三方SDK,可使用自定义类重写viewWillLayoutSubviews,但是推荐在分类使用方法交换进行实现
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
self.headerView.style = self.style;
self.dismissView.frame = self.view.bounds;
self.contentView.backgroundColor = self.datePicker.backgroundColor;
if (self.style == PGDatePickManagerStyleSheet) {
[self setupStyleSheet];
}else if (self.style == PGDatePickManagerStyleAlertTopButton) {
[self setupStyleAlert];
}else {
[self setupStyle3];
}
// [self.view bringSubviewToFront:self.contentView];
[[UIApplication sharedApplication].keyWindow addSubview:_dismissView];
[[UIApplication sharedApplication].keyWindow addSubview:self.contentView];
}