0
点赞
收藏
分享

微信扫一扫

iOS小技能:时间选择器(支持修改筛选的时间纬度精确到时分秒、设置默认选中的时间)

Villagers 2022-08-01 阅读 26


前言

  • 支持修改筛选的时间纬度精确到时分秒
  • 支持设置默认选中的时间


I 时间选择器

pod 'PGDatePicker' ,'2.6.9'

1.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

  1. 点击日期控件弹出日期选择器

false

  1. 监听时间的选择

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 设置默认选中的时间

iOS小技能:时间选择器(支持修改筛选的时间纬度精确到时分秒、设置默认选中的时间)_ide

注意时间的格式是​​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];

}


举报

相关推荐

0 条评论