我在我的iPhone应用程序中使用UIDatePicker。我点击了一个按钮,其中datepicker的模式在UIDatePickerModeTime和UIDatePickerModeDate之间切换。 当我在模式为UIDatePickerModeDate时更改datepicker的日期时,我切换模式时正确显示更改日期,但如果我更改时间并切换模式,再次将模式切换为UIDatePickerModeTime会将时间重置为12:00 AM。我不知道为什么会发生这种情况以及该怎么做。请帮助。
答案 0 :(得分:1)
我有类似的问题。我第一次从UIDatePickerModeDate更改为UIDatePickerModeTime时,时间还可以。但是,当我再次返回到..Date模式然后再转到..Time模式时,时间读取00:00。此后,无论模式改变的次数如何,时间总是保持在00:00。我以编程方式将UIDatePicker建模为与Apple的UICatalog应用程序中的UIDatePicker相同。他们的应用程序中不存在此行为。
带头,我在保留的@property中保存了选择器中的NSDate值,目的是在UIControl通知时检索并重置选择器。但是,当选择器从“日期”模式更改为“时间”模式时,我找不到触发的事件。我甚至尝试过这样的事情:
[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。如果切换到日期或时间以外的模式并切换回,则所有模式将重置为其最低值。
答案 1 :(得分:0)
我使用了一个Date对象,我将其声明为一个属性,当我提供日期选择器时,我在该属性中存储了日期选择器中的日期。 我在日期选择器中更改日期时更新了存储日期(使用UIControl通知) 在更改日期选择器的模式时,我将相同的日期分配给日期选择器。
我明白这是相当简单的,但以前我通过采用一个不起作用的简单Date对象来尝试相同的事情。制作一个属性为我做了工作