公历农历时间选择器

由于公司项目有个新需求,需要弹出公历和农历相互转化的时间选择器(类似万年历的时间弹框)。刚拿到需求的时候,在网上搜索好久,发现农历的时间选择器都少之甚少,又何况公历和农历的相互转化的时间选择器。遍寻许久终于发现一位大佬写的农历时间选择器。在此基础之上,整合公司的需求,终于完成了任务。下面分享给大家。


屏幕快照 2019-06-06 下午4.11.31.png

点击农历按钮转化为农历


屏幕快照 2019-06-06 下午4.11.43.png

首先,要自定义一个公历时间选择器弹框,可以分为多种样式(年月日时,年月日,月日时等等)。


屏幕快照 2019-06-06 下午4.08.41.png

声明bool值_isNong判断是公历还是农历。只要点击农历按钮的时候,设置_isNong为yes,刷新pikerView即可。

#pragma mark -每一行显示viewForRow
-(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:12]];
    }
    NSString *title;
    if (_isNong) {
        //农历
        
        switch (self.dateStyle) {
            case DateStyleShowYearMonthDayHourMinute:{
                if (component==0) {
                    NSString * str = years[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    str =[NSString stringWithFormat:@"%@",  [array objectAtIndex:2]];
                    
                    title=   [NSString stringWithFormat:@"%@年", str];
                }
                if (component==1) {
                    NSString * str = months[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    if ([[array objectAtIndex:0]isEqualToString:@"a"]) {
                        str =[((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1];
                    } else {
                        str =[NSString stringWithFormat:@"%@%@", @"闰", [((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1]];
                    }
                    
                    title=   [NSString stringWithFormat:@"%@", str];
                }
                if (component==2) {
                    NSString * str = days[row];
                    
                    int day = [str intValue];
                    
                    
                    
                    NSString *jieqi=[[IDJCalendarUtil jieqiWithYear:[_cal.year intValue]]objectForKey:[NSString stringWithFormat:@"%@-%d", _cal.month, [str intValue]]];
                    
                    if (!jieqi) {
                        str =[NSString stringWithFormat:@"%@", [((IDJChineseCalendar *) _cal).chineseDays objectAtIndex:[str intValue]-1]];
                    } else {
                        str=[NSString stringWithFormat:@"%@", jieqi];
                    }
                    
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithChineseYear:[_cal.year integerValue] month:_cal.month day:day]];
                    title=   [NSString stringWithFormat:@"%@%@", str,[_weekArray objectAtIndex:weekday.intValue]];
                }
                if (component==3) {
                    title = [NSString stringWithFormat:@"%@时",_hourArray[row]];
                }
                if (component==4) {
                    title = [NSString stringWithFormat:@"%@分",_minuteArray[row]];
                }
            }
                
                break;
            case DateStyleShowYearMonthDay:
            {
                if (component==0) {
                    NSString * str = years[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    str =[NSString stringWithFormat:@"%@",  [array objectAtIndex:2]];
                    
                    title=   [NSString stringWithFormat:@"%@年", str];
                }
                if (component==1) {
                    NSString * str = months[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    if ([[array objectAtIndex:0]isEqualToString:@"a"]) {
                        str =[((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1];
                    } else {
                        str =[NSString stringWithFormat:@"%@%@", @"闰", [((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1]];
                    }
                    
                    title=   [NSString stringWithFormat:@"%@", str];
                }
                if (component==2) {
                    NSString * str = days[row];
                    
                    
                    NSString *jieqi=[[IDJCalendarUtil jieqiWithYear:[_cal.year intValue]]objectForKey:[NSString stringWithFormat:@"%@-%d", _cal.month, [str intValue]]];
                    
                    if (!jieqi) {
                        str =[NSString stringWithFormat:@"%@", [((IDJChineseCalendar *) _cal).chineseDays objectAtIndex:[str intValue]-1]];
                    } else {
                        str=[NSString stringWithFormat:@"%@", jieqi];
                    }
                    //                        title=   [NSString stringWithFormat:@"%@", str];
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithChineseYear:[_cal.year integerValue] month:_cal.month day:[days[row] integerValue]]];
                    title=   [NSString stringWithFormat:@"%@%@", str,[_weekArray objectAtIndex:weekday.intValue]];
                }
                
            }
                
                break;
            case DateStyleShowMonthDayHourMinute:
            {
                NSString *pYear=[_cal.year copy];
                if (![pYear isEqualToString:_cal.year]) {
                    [self changeMonths];
                }
                //                NSString *pMonth=[_cal.month copy];
                //
                //                if (![pMonth isEqualToString:_cal.month]) {
                //                    //联动天数的滚轮
                //                    [self changeDays];
                //                }
                if (component==0) {
                    NSString * str = months[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    if ([[array objectAtIndex:0]isEqualToString:@"a"]) {
                        str =[((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1];
                    } else {
                        str =[NSString stringWithFormat:@"%@%@", @"闰", [((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1]];
                    }
                    
                    title=   [NSString stringWithFormat:@"%@", str];
                }
                if (component==1) {
                    NSString * str = days[row];
                    
                    
                    NSString *jieqi=[[IDJCalendarUtil jieqiWithYear:[_cal.year intValue]]objectForKey:[NSString stringWithFormat:@"%@-%d", _cal.month, [str intValue]]];
                    
                    if (!jieqi) {
                        str =[NSString stringWithFormat:@"%@", [((IDJChineseCalendar *) _cal).chineseDays objectAtIndex:[str intValue]-1]];
                    } else {
                        str=[NSString stringWithFormat:@"%@", jieqi];
                    }
                    //                        title=   [NSString stringWithFormat:@"%@", str];
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithChineseYear:[_cal.year integerValue] month:_cal.month day:[days[row] integerValue]]];
                    title=   [NSString stringWithFormat:@"%@%@", str,[_weekArray objectAtIndex:weekday.intValue]];
                }
                if (component==2) {
                    title = [NSString stringWithFormat:@"%@时",_hourArray[row]];
                }
                if (component==3) {
                    title = [NSString stringWithFormat:@"%@分",_minuteArray[row]];
                }
            }
                
                break;
            case DateStyleShowMonthDay:
            {
                NSString *pYear=[_cal.year copy];
                if (![pYear isEqualToString:_cal.year]) {
                    [self changeMonths];
                }
                NSString *pMonth=[_cal.month copy];
                
                if (![pMonth isEqualToString:_cal.month]) {
                    //联动天数的滚轮
                    [self changeDays];
                }
                if (component==0) {
                    NSString * str = months[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    if ([[array objectAtIndex:0]isEqualToString:@"a"]) {
                        str =[((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1];
                    } else {
                        str =[NSString stringWithFormat:@"%@%@", @"闰", [((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1]];
                    }
                    
                    title=   [NSString stringWithFormat:@"%@", str];
                }
                if (component==1) {
                    NSString * str = days[row];
                    
                    
                    NSString *jieqi=[[IDJCalendarUtil jieqiWithYear:[_cal.year intValue]]objectForKey:[NSString stringWithFormat:@"%@-%d", _cal.month, [str intValue]]];
                    
                    if (!jieqi) {
                        str =[NSString stringWithFormat:@"%@", [((IDJChineseCalendar *) _cal).chineseDays objectAtIndex:[str intValue]-1]];
                    } else {
                        str=[NSString stringWithFormat:@"%@", jieqi];
                    }
                    //                        title=   [NSString stringWithFormat:@"%@", str];
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithChineseYear:[_cal.year integerValue] month:_cal.month day:[days[row] integerValue]]];
                    title=   [NSString stringWithFormat:@"%@%@", str,[_weekArray objectAtIndex:weekday.intValue]];
                }
                
            }
                
                break;
                
            default:
                break;
        }
        
    }else {//阳历
        
        
        
        switch (self.dateStyle) {
            case DateStyleShowYearMonthDayHourMinute:
                if (component==0) {
                    title = [NSString stringWithFormat:@"%@年",_yearArray[row]];
                    
                }
                if (component==1) {
                    title = [NSString stringWithFormat:@"%@月",_monthArray[row]];
                    
                }
                if (component==2) {
                    
                    \
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithSolarYear:[_yearArray[yearIndex] integerValue] month:_monthArray[monthIndex] day:[_dayArray[row] integerValue]]];
                    
                    title = [NSString stringWithFormat:@"%@日%@",_dayArray[row],[_weekArray objectAtIndex:weekday.intValue ]];
                    
                }
                if (component==3) {
                    title = [NSString stringWithFormat:@"%@时",_hourArray[row]];
                }
                if (component==4) {
                    title = [NSString stringWithFormat:@"%@分",_minuteArray[row]];
                }
                break;
            case DateStyleShowYearMonthDay:
                if (component==0) {
                    title =  [NSString stringWithFormat:@"%@年",_yearArray[row]];
                }
                if (component==1) {
                    title =  [NSString stringWithFormat:@"%@月",_monthArray[row]];
                }
                if (component==2) {
                    
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithSolarYear:[_yearArray[yearIndex] integerValue] month:_monthArray[monthIndex] day:[_dayArray[row] integerValue]]];
                    
                    title = [NSString stringWithFormat:@"%@日%@",_dayArray[row],[_weekArray objectAtIndex:weekday.intValue ]];
                    
                    
                }
                break;
                
            case DateStyleShowMonthDayHourMinute:
                if (component==0) {
                    title =  [NSString stringWithFormat:@"%@月",_monthArray[row%12]];
                }
                if (component==1) {
                    //                    title = _dayArray[row];
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithSolarYear:[_yearArray[yearIndex] integerValue] month:_monthArray[monthIndex] day:[_dayArray[row] integerValue]]];
                    
                    title = [NSString stringWithFormat:@"%@日%@",_dayArray[row],[_weekArray objectAtIndex:weekday.intValue ]];
                }
                if (component==2) {
                    title =  [NSString stringWithFormat:@"%@时",_hourArray[row]];
                }
                if (component==3) {
                    title =  [NSString stringWithFormat:@"%@分",_minuteArray[row]];
                }
                break;
            case DateStyleShowMonthDay:
                if (component==0) {
                    title = [NSString stringWithFormat:@"%@月",_monthArray[row%12]];
                }
                if (component==1) {
                    //                    title = _dayArray[row];
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithSolarYear:[_yearArray[yearIndex] integerValue] month:_monthArray[monthIndex] day:[_dayArray[row] integerValue]]];
                    
                    title = [NSString stringWithFormat:@"%@日%@",_dayArray[row],[_weekArray objectAtIndex:weekday.intValue ]];
                    
                }
                break;
                
            default:
                title = @"";
                break;
        }
        
        
    }
    
    
    customLabel.text = title;
    
    return customLabel;
    
}

关于农历,是参照大佬的(IDJChineseCalendar)封装改编的。当点击农历的时候,调用下面的方法

-(void)nongAction:(UIButton *)button{
    
    button.selected = !button.selected;
    _isNong = !_isNong;
    if (_isNong) {
        //显示农历数据
        _cal=[[IDJChineseCalendar alloc]initWithYearStart:MINYEAR end:MAXYEAR];
        [self _setYears];
        [self _setMonthsInYear:[_cal.year intValue]];
        [self _setDaysInMonth:_cal.month year:[_cal.year intValue]];
        
    }
    
    [self getNowDate:self.scrollToDate animated:YES];
    [self.datePicker reloadAllComponents];
    
    
    
}

你可能感兴趣的:(公历农历时间选择器)