iOS中如何为UIDatePicker设置默认今日日期与指定默认时间?
解决UIDatePicker默认显示今日日期+指定时间的问题
这个需求很常见,我来给你一步步搞定~核心思路就是手动构建一个包含今日日期和你指定时间的Date对象,然后把它赋值给UIDatePicker的date属性就行。下面是具体的实现步骤和代码:
实现思路拆解
- 先获取系统日历对象,用来拆分、组合日期和时间组件
- 提取今日的年、月、日信息,保证日期是当天
- 自定义你需要的时间(比如上午9点、下午2点半这类)
- 把日期和时间组件合并成一个新的目标Date
- 最后把这个目标Date赋值给UIDatePicker
Objective-C 代码示例
// 初始化UIDatePicker,注意直接设置正确的模式即可,不用重复赋值 _datePicker = [[UIDatePicker alloc] initWithFrame:CGRectZero]; _datePicker.datePickerMode = UIDatePickerModeDateAndTime; // 获取当前日历实例 NSCalendar *calendar = [NSCalendar currentCalendar]; // 提取今日的年、月、日组件 NSDateComponents *todayDateComponents = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]]; // 设置你需要的指定时间,这里示例为9点0分0秒,可按需修改 NSDateComponents *targetTimeComponents = [[NSDateComponents alloc] init]; targetTimeComponents.hour = 9; targetTimeComponents.minute = 0; targetTimeComponents.second = 0; // 合并日期和时间组件,生成最终的目标日期 todayDateComponents.hour = targetTimeComponents.hour; todayDateComponents.minute = targetTimeComponents.minute; todayDateComponents.second = targetTimeComponents.second; NSDate *targetDate = [calendar dateFromComponents:todayDateComponents]; // 给UIDatePicker设置目标日期,animated设为YES会有平滑过渡效果 [_datePicker setDate:targetDate animated:NO];
小补充
- 如果需要设置日期时有动画过渡,把
animated:NO改成animated:YES就行 - 你可以随意调整
targetTimeComponents里的hour、minute值,比如要设为16:45,就写hour=16、minute=45 - 你原代码里重复设置了
datePickerMode,建议只保留一次_datePicker.datePickerMode = UIDatePickerModeDateAndTime;,避免冗余代码
内容的提问来源于stack exchange,提问作者isuru




