美文网首页自专题iOS开发IOS三人行
【iOS】自定义日期选择器

【iOS】自定义日期选择器

作者: 胖嘟嘟小团子 | 来源:发表于2016-08-22 15:45 被阅读13148次

自定义了一个日期选择器,与大家分享一下,期待宝贵建议。
github下载地址:https://github.com/XHJCoder/XHDatePicker
下面只是说明一下怎么用,具体实现请下载代码看看;
如果大家觉得这个分享有所帮助的话,麻烦给个Star✨,谢谢!😊

日期选择器

.h文件解析

  • 生成对象并展示
/**
 @param completeBlock 时间选择好之后的回调,返回选择的时间和时间的String值
 */
+ (instancetype)showWithCompleteBlock:(void(^)(NSDate *date, NSString *dateString))completeBlock;
  • 选择日期选择器样式
typedef enum {
    XHDatePickerModeYearMonthDayHourMinute  = 0,   // 年月日时分
    XHDatePickerModeMonthDayHourMinute,            // 月日时分
    XHDatePickerModeYearMonthDay,                  // 年月日
    XHDatePickerModeYearMonth,                     // 年月
    XHDatePickerModeMonthDay,                      // 月日
    XHDatePickerModeHourMinute                     // 时分
} XHDatePickerMode;

// default is XHDatePickerModeYearMonthDayHourMinute
@property (nonatomic, assign) XHDatePickerMode datePickerMode;
  • 设置最大最小时间限制
@property (nonatomic, strong) NSDate *minimumDate; // 限制最大时间(default is nil)
@property (nonatomic, strong) NSDate *maximumDate; // 限制最小时间(default is nil)
  • 设置当前显示时间
// 当前显示时间(default is [NSDate date])
@property (nonatomic, strong) NSDate *date;        
  • 设置主题色
@property (nonatomic, strong) UIColor *themeColor;     
  • 设置时间格式(体现在block回调里的dateString上)
/**
 * 默认与datePickerMode相对应
 * 比如:XHDatePickerModeYearMonthDayHourMinute对应的dateFormatter是:@"yyyy-MM-dd HH:mm"
 * 你也可以设置格式为 yyyy年MM月dd日HH时mm分
 */
@property (nonatomic, copy) NSString *dateFormatter;    

具体使用代码

   XHDatePicker *datePicker = [XHDatePicker showWithCompleteBlock:^(NSDate *date, NSString *dateString) {
        NSLog(@"%@ , %@",date, dateString);
    }];
    
    datePicker.date = [NSDate date:@"2018-05-13 22:55" WithFormat:@"yyyy-MM-dd HH:mm"];
    datePicker.minimumDate = [NSDate date:@"2015-01-14 12:14" WithFormat:@"yyyy-MM-dd HH:mm"];
    datePicker.maximumDate = [NSDate date:@"2022-11-23 07:55" WithFormat:@"yyyy-MM-dd HH:mm"];
    datePicker.themeColor = [UIColor redColor];
    datePicker.dateFormatter = @"yyyy年MM月dd日 HH:mm";
    datePicker.datePickerMode = XHDatePickerModeYearMonthDayHourMinute;    

相关文章

网友评论

  • 一米阳光_c717:写的很好,给个star
  • 跑神的心:[NSDate date:@"2018-05-13 22:55" WithFormat:@"yyyy-MM-dd HH:mm"] 这都不是一个方法,直接报错找不到此类方法啊
  • ac71b637c5b5:下载了最新版 如果不设置minLimitDate maxLimitDate 会crash
  • 87c98ab9822d:很喜欢你的设计,希望你能再接再厉
  • long弟弟:给你star以示鼓励,加油!顺道提个疑问,我怎么选择不了日期啊?就是你的Demo选择日期 一会就跳回来了,这个可以来个详解吗?
    long弟弟:@花小狐yu 就是选择不了日期,更改日期后日期会变化,你可以试一下demo
    胖嘟嘟小团子:@long弟弟 什么意思没太懂:cry:
  • 235a008fb19c:滑动后时间不同步 小时相差8小时
    胖嘟嘟小团子:@陌颜微笑 NSLog打印的时间会和实际时间相差8小时,转成字符串会打印出正确的时间。(因为NSLog里,对时间的格式化是按GMT时间来转的,GMT时间与北京时间相差8小时)
  • 禅牧:找到了,.m文件656,657行的minLimitDate,改成maxLimitDate就能显示设置预设时间了,楼主写错了,github已经star,谢谢作者
  • 禅牧:默认时间设置了没有用呀,老大
  • 84ac3d676fbe:如何设置默认显示时间呢
  • 46b4baa1abb9:当选择开始时间和结束时间成功后,再次点击修改开始时间,结束时间不变,点击确定,只有开始时间,结束时间为空,这个怎么解决。
    胖嘟嘟小团子:@CML_ea25 这个就看你自己根据需求去判断了。也不难。
    46b4baa1abb9:@花小狐y 当我第一次去点击开始和结束时间显示都是没有问题的,但是当我再次编辑只是编辑开始时间,结束时间我不去编辑,第一次我选择的开始时间改变了,但是结束时间没有了,我第二次我是没有去选择我想保持第一次选择的时间。
    胖嘟嘟小团子:@CML_ea25 如果真的选中了时间是不会为空的,可能你只是点击到结束时间并没有去选结束时间
  • 林氏情歌:楼主,我点结束时间的时候,为什么在选择器没有自动跳到结束那个选项,我尝试改了分段控制的index还是没有用,在找其他的方法
    林氏情歌:@花小狐yu 我知道啦
    林氏情歌:@花小狐yu 我知道这个是时间类型啊,我想知道的是,比如我点击了结束时间,跳出的时间选择器上的分段控制器应该自动定位到结束时间那一项啊,正常情况只要修改selectedSegmentIndex这个就行了,可是我修改了,还是一开始默认选择的是开始时间
    胖嘟嘟小团子:typedef enum{
    DateTypeStartDate,
    DateTypeEndDate
    }XHDateType;
    //设置是时间类型
    @property (nonatomic,assign)XHDateType dateType;
  • 我是要成为大神的男人:setMaxLimitDate:这个方法中,你写成了 minLimitDate,改过来吧。
    给我一支烟smoking:默认时间不对,找了半天
  • 陌上北辰:楼主,麻烦再修改下哦,动不动就crash
    陌上北辰:@花小狐yu 就我上面发的那个 最小日期 设置1927-2-8 的时候会崩溃
    胖嘟嘟小团子:我自己的项目中也在用没有遇到crash:cry:,我不知道你在哪里crash的,可以具体说一下什么原因导致的crash吗
    陌上北辰: datepicker.minLimitDate = [NSDate date:@"1927-2-28 12:22" WithFormat:@"yyyy-MM-dd HH:mm"];
  • L_Glenn:妹子写的很棒,好像联动有点问题..我在看看,已star
    胖嘟嘟小团子:@Vasili_biubiu :relaxed:
  • 爱吃鱼的小灰:可以把分钟数间隔设置为5分钟么?在线等很着急
    胖嘟嘟小团子:你可以去到实现代码里修改分钟那一块的逻辑
  • 蜕变163:怎么同时设置开始时间和结束时间?
    胖嘟嘟小团子:@蜕变163 你可以在block回调里根据你的需求修改
    蜕变163:选好开始时间按确定,然后再选择结束时间,开始时间就空了
    胖嘟嘟小团子:@蜕变163 你选择好开始时间后到结束时间再选择就可以了
  • King_mr:喜欢你的UI。不过我只想要今天明天后天的时间要怎么做?
    King_mr:@花小狐yu 已经实现了,只是跟以前想的不太一样,最大最小实现了 但是会显示3天后的时间的
    胖嘟嘟小团子:你可是通过设置最大最小时间实现:blush:
  • 卧龙小:非常棒的,已经star
  • swift_kotlin:楼主,每次选择时间都是当前时间,如何显示当前UITextField的时间,如果TextField显示2012-07-08,但是我弹出框还是显示当前时间,这个咋么改??
    胖嘟嘟小团子:针对你的问题我新增了一个方法,你下载最新的看看能不能实现你想要的效果
    swift_kotlin:选择时间如何弹出你上一次选的时间而不是每次都是当前时间???谢谢楼主
  • 4999f4b4f3c4:请问 如何能够不显示过去月日啊 从最新时间开始显示
    胖嘟嘟小团子:@李昊_035f 设置minLimitDate=[NSDate date];
  • 浅浅浅丿忧伤:如果手机能调用原生的就特棒了:smile:
  • DeveloperTang:你好 我调用你的时间选择器当使用年月日模式的时候怎么会数组越界啊
    eeaddbf1f724:@花花0809 请问怎么解决
    eeaddbf1f724:我也会有这种情况,请问怎么解决的
    胖嘟嘟小团子:@SilenceEndure 你好,我没有遇到这个问题,请问你是这么操作的
  • iXiaoChuan:选择日期的以后,返回回调,日期都会比之前选中的少一天,为啥这么设置?
    胖嘟嘟小团子:@iXiaoChuan 你好,我在文章最后说了有个八小时的时差,显示的时间是对的。只是打印时间差8小时
    iXiaoChuan:@花花0809 我用的是"年月日"类型,不是返回了_startDate 和 _endDate么,返回来的数据总是比选择的少一天.我使用字符串获取的返回日期的前十位,也就是"XXXX-XX-XX".后来发现,原来你是在NSDate的扩展方法里面做了时区的操作,我就在回调Block里面用了datefameter获取时间,貌似天数就是正确的天数了. 但是时区那块具体做了什么操作,我还没来得及深入研究
    胖嘟嘟小团子:@iXiaoChuan 没有少一天呀。你在哪看少一天?
  • 靖锅锅_:很不错哦:+1:
  • 3cce1c9d02ff:你的界面写的很漂亮,但是当我选中8月31日的时候,然后把8切换到9月份的时候,崩溃了。有逻辑Bug没处理,代码不是很健壮哦。
    胖嘟嘟小团子:@IT理工木呆男 嗯,这个还比较粗糙,后期有优化还没有上传到GitHub上
  • 爱貌貌Manners:一给楼主star了呢,挺好的。就是开始时间和结束时间没有记录。得按顺序来,而且每次都得从新按顺序来
    胖嘟嘟小团子:@Manners_Lee这的 demo写完就放一边了,好久没看,有时间会进行优化的,感谢你提出的意见和star:blush:
    爱貌貌Manners:@Manners_Lee 还有datePickerStyle能否更全些,比如格式:年 月 日 时 ,这个的就没有
  • Rickie_Lambert:你的 年 月 日 时 分 秒 文字label显示的位置不对, 你的frame给的肯定有误, 看了demo, 在XHDatePickerView.m 文件中, label 的 frame 修改一下, 文字和数字就都在同一水平线上了

    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(labelX, (self.showYearView.frame.size.height-15)/2, 15, 15)];
    胖嘟嘟小团子:@Mr_Rain 感谢你提出的想法:smile:
    Rickie_Lambert:@花花0809 哦,那好吧:disappointed_relieved::disappointed_relieved:
    胖嘟嘟小团子:@Mr_Rain 我本意就不是要在同一水平线上
  • 飞翔的小骑兵:不能选小于2017年的
    飞翔的小骑兵:@花花0809 挺不错
    胖嘟嘟小团子:@c1ear 设置了最小限制时间,这个可以自己修改

本文标题:【iOS】自定义日期选择器

本文链接:https://www.haomeiwen.com/subject/ohzudttx.html