我在我的 iPhone 应用程序中使用 UIDatePicker。我保留了一个按钮来单击日期选择器的模式在 UIDatePickerModeTime 和 UIDatePickerModeDate 之间切换。当我在模式为 UIDatePickerModeDate 时更改日期选择器的日期时,更改的日期在我切换模式时正确显示,但如果我更改时间并切换模式,再次将模式切换为 UIDatePickerModeTime 会将时间重置为上午 12:00。我不明白为什么会发生这种情况以及该怎么做。请帮忙。
2 回答
我有一个类似的问题。第一次从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。如果您切换到日期或时间以外的模式并切换回来,所有模式都将重置为其底值。
我使用了一个我声明为属性的 Date 对象,当我展示日期选择器时,我在其中存储了日期选择器中的日期。当我更改日期选择器中的日期时,我更新了存储的日期(使用 UIControl 通知) 在更改日期选择器的模式时,我将相同的日期分配给日期选择器。
我知道这很简单,但以前我通过采用一个不起作用的简单 Date 对象来尝试同样的事情。使它成为一个属性为我完成了这项工作