【iOS开发】自定义年月/年月日时间选择器

整理优化代码的时候, 突然看到项目里的这个小功能,就摘出来理一下造个轮子吧。

众所周知, UIDatePicker支持4种模式的显示:

日常我们做日期筛选之类的, 直接创建UIDatePicker对象即可, 但是, 总有一些需求只要年月筛选的, 或者说UI进行了额外的设计,需要我们使用UIPickerView进行自定义,所以一个简单的轮子给大家直接使用:

年月时间选择器
年月日时间选择器

先看下自定义SWCenterDatePickerView.h:

初始化SWCenterDatePickerView对象时, 传入对应的viewType样式值,并设置当前的delegate, 直接调用showDatePickerView方法:

SWCenterDatePickerView *view = [[SWCenterDatePickerView alloc] initDatePickerViewWithType:DatePickerViewType_YM Delegate:self];
[view showDatePickerView];

初始化时间为当前时间, 当有选择时间后, 再次showView 时可以传入选择的时间,会自动滚动到指定的时间位置:

SWCenterDatePickerView *view = [[SWCenterDatePickerView alloc] initDatePickerViewWithType:DatePickerViewType_YMD Delegate:self];
view.currentTime = self.selectDateStr;
[view showDatePickerView];

滚动到指定时间位置代码逻辑:

对于年月日模式来说, 一个很重要的点是要根据年月获取当前月有多少天数,然后在滑动年月时重新刷新日的那一列:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if (component == 0) {

        [self DaysfromYear:[_yearArray[row] integerValue] andMonth:[_monthArray[monthIndex] integerValue]];
        yearIndex = row;
    }
    else if (component == 1) {
       
        [self DaysfromYear:[_yearArray[yearIndex] integerValue] andMonth:[_monthArray[row] integerValue]];
        monthIndex = row;
        
        if (dayIndex == _dayArray.count || dayIndex > _dayArray.count) {
            dayIndex = _dayArray.count - 1;
        }
        
    }
    else if (component == 2){
        dayIndex = row;
    }
    
    [pickerView reloadAllComponents];
}

具体的Demo:
网盘查看 :密码: 5apm
码云查看

使用时可将DatePickerView文件夹拷贝到自己的项目中, 还可自己添加修改界面UI:

如果对你有用, 麻烦给个星~~

你可能感兴趣的:(【iOS开发】自定义年月/年月日时间选择器)