我也有类似的问题。第一次从UIDatePickerModeDate改成UIDatePickerModeTime,时间还可以。但是,当我切换回 ..Date 模式,然后再次切换到 ..Time 模式时,时间显示为 00:00。此后,无论模式切换多少次,时间始终保持在 00:00。我以编程方式将我的 UIDatePicker 建模为与 Apple 的 UICatalog 应用程序中的 UIDatePicker 相同。这种行为在他们的应用程序中不存在。
带头,我将选择器中的 NSDate 值保存在保留的@property 中,目的是根据 UIControl 通知检索和重置选择器。 However, I could not find an event that fired when the picker was changed from Date mode to Time mode.我什至尝试过类似的东西:
[myDatePicker addTarget:self action:@selector(getDateTime:) forControlEvents:UIControlEventAllEvents];
当然,如果我更改了选择器的日期(或时间),但正如我所提到的,当我更改模式时不会触发该事件。
我最终使用了一个 UISegmentedControl(与 UICatalog 应用程序中的相同),它针对上面切换模式的相同事件方法。但是,当我将选择器重置为保存的 NSDate 值时,时间保持在 00:00。然后我使用 NSLog 验证保存的值是否正常,发现它的时间值部分也更改为 00:00!这确实很奇怪,因为我没有保存新的 NSDate 值。原来保存的值只是自己改变了!
我仍在调查该问题,并且非常接近将其称为错误,尤其是在没有支持 NIB 的情况下以编程方式添加 UIDatePicker 时。
更新:
我的最终解决方案与您的几乎相同。由于某种原因,当保存的日期存储为 NSDate 值时,错误继续存在。将其存储为 NSString 并以两种方式进行类型转换就可以了:
self.saveDate = (NSString*)self.myDatePicker.date;
...
[self.myDatePicker setDate:(NSDate*)self.saveDate animated:NO];
此外,由于我正在通过 GCD dispatch_async 块检索日期并将其保存到外部设备,因此属性 self.还需要符号(即使在 main_que 上)。
最终结论:
我现在确信,每次访问选择器时设置 UIDatePicker 日期是必要的要求,而不是错误。使用 Apple 的 UICatalog 应用程序,当您将日期设置为今天一次,然后在日期和时间模式之间切换时,他们的应用程序表现出完全相同的行为。保留日期,但时间重置为 00:00。如果您切换到日期或时间以外的模式并切换回来,所有模式都将重置为其底值。