整理优化代码的时候, 突然看到项目里的这个小功能,就摘出来理一下造个轮子吧。
众所周知, 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];
}
使用时可将DatePickerView
文件夹拷贝到自己的项目中, 还可自己添加修改界面UI:
如果对你有用, 麻烦给个星~~