【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:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容