//
|
// PBEditDateView.m
|
// IphoneBIMe
|
//
|
// Created by zjf on 2018/8/20.
|
// Copyright © 2018年 ProBIM. All rights reserved.
|
//
|
|
#import "PBEditDateView.h"
|
#import "PBIssueAddModel.h"
|
#define MAXYEAR 2099
|
#define MINYEAR 2000
|
|
@interface PBEditDateView()<UIPickerViewDelegate,UIPickerViewDataSource>
|
{
|
//日期存储数组
|
NSMutableArray *_yearArray;
|
NSMutableArray *_monthArray;
|
NSMutableArray *_dayArray;
|
|
NSString *_dateFormatter;
|
//记录位置
|
NSInteger yearIndex;
|
NSInteger monthIndex;
|
NSInteger dayIndex;
|
}
|
@property (nonatomic, weak) UILabel *endDateL;
|
@property (nonatomic, weak) UILabel *endDatesSelectL;
|
@property (nonatomic, weak) UILabel *promptL;
|
@property (nonatomic,strong)UIPickerView *datePicker;
|
@property (nonatomic, strong) UIView *bgView;
|
@property (nonatomic, copy) NSString *selectDateStr;
|
@end
|
|
@implementation PBEditDateView
|
|
- (instancetype)initWithFrame:(CGRect)frame {
|
if (self = [super initWithFrame:frame]) {
|
self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
|
[self addSubview:self.bgView];
|
_dateFormatter = @"yyyy-MM-dd";
|
[self setupUI];
|
[self defaultConfig];
|
}
|
return self;
|
}
|
-(void)defaultConfig {
|
//设置年月日时分数据
|
_yearArray = [self setArray:_yearArray];
|
_monthArray = [self setArray:_monthArray];
|
_dayArray = [self setArray:_dayArray];
|
for (int i=1; i<13; i++) {
|
NSString *num = [NSString stringWithFormat:@"%02d",i];
|
[_monthArray addObject:num];
|
}
|
for (NSInteger i=MINYEAR; i<=MAXYEAR; i++) {
|
NSString *num = [NSString stringWithFormat:@"%ld",(long)i];
|
[_yearArray addObject:num];
|
}
|
}
|
|
- (NSMutableArray *)setArray:(id)mutableArray {
|
if (mutableArray)
|
[mutableArray removeAllObjects];
|
else
|
mutableArray = [NSMutableArray array];
|
return mutableArray;
|
}
|
- (void)setupUI {
|
UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bgView.width, 3)];
|
topView.backgroundColor = WarningColor;
|
[self.bgView addSubview:topView];
|
UILabel *endDateL = [UILabel z_labelWithText:@"截止日期" Color:PromptColor isBold:NO Font:DescFontSize];
|
[self.bgView addSubview:endDateL];
|
[endDateL mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(topView.mas_bottom).offset(31);
|
make.centerX.equalTo(self.bgView);
|
make.height.equalTo(@20);
|
}];
|
UILabel *endDatesSelectL = [UILabel z_labelWithText:@"请选择" Color:IgnoreColor isBold:NO Font:MarkedFontSize];
|
endDatesSelectL.textAlignment = NSTextAlignmentCenter;
|
[self.bgView addSubview:endDatesSelectL];
|
[endDatesSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(endDateL.mas_bottom).offset(14);
|
make.left.equalTo(self.bgView).offset(16);
|
make.right.equalTo(self.bgView).offset(-16);
|
make.height.equalTo(@25);
|
}];
|
UIView *lin1View = [[UIView alloc] init];
|
lin1View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
|
[self.bgView addSubview:lin1View];
|
[lin1View mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(endDatesSelectL.mas_bottom).offset(39);
|
make.left.right.equalTo(self.bgView);
|
make.height.equalTo(@1);
|
}];
|
|
UILabel *promptL =[UILabel z_labelWithText:@"请选择截止日期" Color:PromptColor isBold:NO Font:MarkedFontSize];
|
promptL.textAlignment = NSTextAlignmentCenter;
|
[self.bgView addSubview:promptL];
|
[promptL mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(lin1View).offset(15);
|
make.size.mas_equalTo(CGSizeMake(150, 25));
|
make.centerX.equalTo(self.bgView);
|
}];
|
UIButton *emptyBtn = [UIButton z_textButton:@"清空" fontSize:MarkedFontSize normalColor:PromptColor];
|
[self.bgView addSubview:emptyBtn];
|
[emptyBtn addTarget:self action:@selector(emptyBtnBtnActio) forControlEvents:UIControlEventTouchUpInside];
|
[emptyBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.centerY.equalTo(promptL);
|
make.left.equalTo(self.bgView).offset(16);
|
make.size.mas_equalTo(CGSizeMake(52, 50));
|
}];
|
|
UIButton *determineBtn = [UIButton z_textButton:@"确定" fontSize:MarkedFontSize normalColor:WarningColor];
|
[self.bgView addSubview:determineBtn];
|
[determineBtn addTarget:self action:@selector(determineBtnActio) forControlEvents:UIControlEventTouchUpInside];
|
[determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.centerY.equalTo(promptL);
|
make.right.equalTo(self.bgView).offset(-16);
|
make.size.mas_equalTo(CGSizeMake(52, 50));
|
}];
|
|
UIView *lin2View = [[UIView alloc] init];
|
lin2View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
|
[self.bgView addSubview:lin2View];
|
[lin2View mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(promptL.mas_bottom).offset(13);
|
make.left.right.equalTo(self.bgView);
|
make.height.equalTo(@1);
|
}];
|
|
[self.bgView addSubview:self.datePicker];
|
[self.datePicker mas_makeConstraints:^(MASConstraintMaker *make) {
|
make.top.equalTo(lin2View.mas_bottom).offset(16);
|
make.left.equalTo(self.bgView).offset(44);
|
make.right.equalTo(self.bgView).offset(-44);
|
make.height.equalTo(@282);
|
}];
|
self.endDateL = endDateL;
|
self.endDatesSelectL = endDatesSelectL;
|
self.promptL = promptL;
|
}
|
- (void)determineBtnActio {
|
int result;
|
if (self.stareDate == nil) {
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
|
NSString *todayStr = [dateFormatter stringFromDate:[NSDate date]];
|
result = [self compareOneDay:todayStr withAnotherDay:self.selectDateStr];
|
}else {
|
result = [self compareOneDay:self.stareDate withAnotherDay:self.selectDateStr];
|
}
|
if (result == 1) {
|
[YJProgressHUD showMessage:@"截止日期不应小于开始日期" inView:self];
|
return;
|
}else {
|
self.IssueAddModel.dateStr = self.selectDateStr;
|
if (self.EditCompleteBlock) {
|
self.EditCompleteBlock();
|
}
|
[self hidden];
|
}
|
}
|
#pragma mark - 时间比较大小
|
- (int)compareOneDay:(NSString *)oneDayStr withAnotherDay:(NSString *)anotherDayStr {
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
|
// NSString *oneDayStr = [dateFormatter stringFromDate:oneDay];
|
// NSString *anotherDayStr = [dateFormatter stringFromDate:anotherDay];
|
NSDate *dateA = [dateFormatter dateFromString:oneDayStr];
|
NSDate *dateB = [dateFormatter dateFromString:anotherDayStr];
|
NSComparisonResult result = [dateA compare:dateB];
|
if (result == NSOrderedDescending) {
|
//oneDay > anotherDay
|
return 1;
|
}else if (result == NSOrderedAscending){
|
//oneDay < anotherDay
|
return -1;
|
}
|
//oneDay = anotherDay
|
return 0;
|
}
|
- (void)emptyBtnBtnActio {
|
self.IssueAddModel.dateStr = nil;
|
if (self.EditCompleteBlock) {
|
self.EditCompleteBlock();
|
}
|
[self hidden];
|
}
|
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
|
CGPoint point=[[touches anyObject]locationInView:self];
|
CALayer *layer=[self.layer hitTest:point];
|
if (layer ==self.layer) {
|
[self hidden];
|
}
|
}
|
- (void)hidden {
|
[UIView animateWithDuration:0.3 animations:^{
|
self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
|
self.bgView.y = PBScreenHeight;
|
}completion:^(BOOL finished) {
|
for (UIView *cover in PBKeyWindow.subviews) {
|
if ([cover isKindOfClass:[PBEditDateView class]]) {
|
[cover removeFromSuperview];
|
}
|
}
|
}];
|
}
|
- (void)show {
|
[UIView animateWithDuration:0.3 animations:^{
|
self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
|
self.bgView.y = PBScreenHeight - self.visualViewHeight;
|
}];
|
}
|
#pragma mark - 懒加载
|
- (UIView *)bgView {
|
if (_bgView == nil) {
|
_bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
|
_bgView.backgroundColor = [UIColor whiteColor];
|
}
|
return _bgView;
|
}
|
- (UIPickerView *)datePicker {
|
if (_datePicker == nil) {
|
_datePicker = [[UIPickerView alloc] init];
|
_datePicker.showsSelectionIndicator = YES;
|
_datePicker.delegate = self;
|
_datePicker.dataSource = self;
|
}
|
return _datePicker;
|
}
|
|
- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
|
_visualViewHeight = visualViewHeight;
|
}
|
#pragma mark - UIPickerViewDelegate,UIPickerViewDataSource
|
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
|
return 3;
|
}
|
|
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
|
NSArray *numberArr = [self getNumberOfRowsInComponent];
|
return [numberArr[component] integerValue];
|
}
|
|
-(NSArray *)getNumberOfRowsInComponent {
|
|
NSInteger yearNum = _yearArray.count;
|
NSInteger monthNum = _monthArray.count;
|
NSInteger dayNum = [self DaysfromYear:[_yearArray[yearIndex] integerValue] andMonth:[_monthArray[monthIndex] integerValue]];
|
|
return @[@(yearNum),@(monthNum),@(dayNum)];
|
}
|
|
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
|
return 60;
|
}
|
|
|
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
|
UILabel *customLabel = (UILabel *)view;
|
if (!customLabel) {
|
customLabel = [[UILabel alloc] init];
|
customLabel.textAlignment = NSTextAlignmentCenter;
|
[customLabel setFont:[UIFont systemFontOfSize:20]];
|
}
|
NSString *title;
|
if (component==0) {
|
title = _yearArray[row];
|
}else if (component==1) {
|
title = _monthArray[row];
|
}else if (component==2) {
|
title = _dayArray[row];
|
}
|
|
customLabel.text = title;
|
customLabel.textColor = TitleColor;
|
return customLabel;
|
|
}
|
|
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
|
if (component == 0) {
|
yearIndex = row;
|
}
|
if (component == 1) {
|
monthIndex = row;
|
}
|
if (component == 2) {
|
dayIndex = row;
|
}
|
if (component == 0 || component == 1){
|
[self DaysfromYear:[_yearArray[yearIndex] integerValue] andMonth:[_monthArray[monthIndex] integerValue]];
|
if (_dayArray.count-1<dayIndex) {
|
dayIndex = _dayArray.count-1;
|
}
|
[pickerView reloadComponent:2];
|
}
|
|
self.selectDateStr = [NSString stringWithFormat:@"%@-%@-%@",_yearArray[yearIndex],_monthArray[monthIndex],_dayArray[dayIndex]];
|
}
|
#pragma mark - tools
|
//通过年月求每月天数
|
- (NSInteger)DaysfromYear:(NSInteger)year andMonth:(NSInteger)month
|
{
|
NSInteger num_year = year;
|
NSInteger num_month = month;
|
BOOL isrunNian = num_year%4==0 ? (num_year%100==0? (num_year%400==0?YES:NO):YES):NO;
|
switch (num_month) {
|
case 1:case 3:case 5:case 7:case 8:case 10:case 12:{
|
[self setdayArray:31];
|
return 31;
|
}
|
case 4:case 6:case 9:case 11:{
|
[self setdayArray:30];
|
return 30;
|
}
|
case 2:{
|
if (isrunNian) {
|
[self setdayArray:29];
|
return 29;
|
}else{
|
[self setdayArray:28];
|
return 28;
|
}
|
}
|
default:
|
break;
|
}
|
return 0;
|
}
|
//设置每月的天数数组
|
- (void)setdayArray:(NSInteger)num {
|
[_dayArray removeAllObjects];
|
for (int i=1; i<=num; i++) {
|
[_dayArray addObject:[NSString stringWithFormat:@"%02d",i]];
|
}
|
}
|
//滚动到指定的时间位置
|
- (void)getNowDate:(NSDate *)date animated:(BOOL)animated {
|
if (!date) {
|
date = [NSDate date];
|
}
|
[self DaysfromYear:date.year andMonth:date.month];
|
self.selectDateStr = [NSString stringWithFormat:@"%zd-%02zd-%02zd",date.year, date.month, date.day];
|
yearIndex = date.year-MINYEAR;
|
monthIndex = date.month-1;
|
dayIndex = date.day-1;
|
NSArray *indexArray = @[@(yearIndex),@(monthIndex),@(dayIndex)];
|
[self.datePicker reloadAllComponents];
|
for (int i=0; i<indexArray.count; i++) {
|
[self.datePicker selectRow:[indexArray[i] integerValue] inComponent:i animated:animated];
|
}
|
}
|
|
- (void)setIssueAddModel:(PBIssueAddModel *)IssueAddModel {
|
_IssueAddModel = IssueAddModel;
|
self.endDateL.text = IssueAddModel.title;
|
self.promptL.text = IssueAddModel.prompt;
|
if (IssueAddModel.dateStr) {
|
self.endDatesSelectL.text = IssueAddModel.dateStr;
|
self.endDatesSelectL.textColor = TitleColor;
|
}else {
|
self.endDatesSelectL.text = @"请选择";
|
self.endDatesSelectL.textColor = IgnoreColor;
|
}
|
if(IssueAddModel.dateStr) {
|
NSDate *scrollToDate = [NSDate date:IssueAddModel.dateStr WithFormat:_dateFormatter];
|
[self getNowDate:scrollToDate animated:NO];
|
}else {
|
[self getNowDate:nil animated:NO];
|
}
|
}
|
- (void)setStareDate:(NSString *)stareDate {
|
_stareDate = stareDate;
|
}
|
|
@end
|