2011-07-18 46 views
0

我在我的iPhone应用程序中使用UIDatePicker。我保留了一个按钮,点击哪个日期选择器的模式在UIDatePickerModeTime和UIDatePickerModeDate之间切换。 当我更改日期选择器的日期,当模式为UIDatePickerModeDate时,更改日期正确显示,当我切换模式,但如果我更改时间并切换模式,再次将模式切换到UIDatePickerModeTime将时间重置为12:00 AM 。我不明白为什么会发生这种情况,应该怎么做,请帮忙。将UIDatePicker的模式更改为UIDatePickerModeTime时,UIDatePicker Time会重置?

回答

0

我用我声明为在其中存储我当我提出日期选择器从日期选择器的日期的属性Date对象。 当我更改日期选择器中的日期(使用UIControl通知)时,我更新了存储的日期 在更改日期选择器的模式时,我将同一日期分配给日期选择器。

我明白这是相当简单的,但以前我被采取哪些没有work.Making一个属性做的工作对我来说

1

我有一个类似的问题,一个简单的Date对象想同样的事情。第一次从UIDatePickerModeDate更改为UIDatePickerModeTime时,时间确定。但是,当我再次回到..Date模式,然后再次转换到..Time模式时,读取时间为00:00。此后,无论模式改变的次数如何,时间总是保持在00:00。我将UIDatePicker编程为与Apple UICatalog应用程序中的UIDatePicker相同。这种行为在他们的应用程序中不存在。

以你的领导,我通过检索和重新在一个UIControl通知拾取器的意图所保持的@property保存从选取器的NSDate值。但是,当拾取器从日期模式更改为时间模式时,我无法找到触发的事件。我甚至想是这样:

 [myDatePicker addTarget:self action:@selector(getDateTime:) forControlEvents:UIControlEventAllEvents]; 

当然的触发的事件,如果我改变了选择器的日期(或时间),但正如我所说,不是我改变了模式。

我最终结束了使用上述靶向其中I切换模式相同的事件方法一个UISegmentedControl(相同于UICatalog应用程序)。但是,当我将拾取器重置为已保存的NSDate值时,时间保持在00:00。然后我使用NSLog来验证保存的值是否正确,并发现其Time值部分也已更改为00:00!这确实很奇怪,因为我没有保存一个新的NSDate值。原来保存的值只是自己改变了!

我仍然在调查这一问题,我非常接近调用它的错误,特别是当在的UIDatePicker编程方式添加,而不需要支持NIB。

更新: 我最终的解决办法是几乎等同于你的。出于某种原因,当保存日期作为NSDate值存储时,错误仍然存​​在。把它作为一个NSString和类型转换左右逢源的伎俩:

self.saveDate = (NSString*)self.myDatePicker.date; 

... 

[self.myDatePicker setDate:(NSDate*)self.saveDate animated:NO]; 

而且,因为我检索和通过GCD dispatch_async块,物业,自我保存日期到外部设备。还需要标记(甚至在main_que上)。

最后得出结论:

我现在确信,设定每个机械手被访问时的UIDatePicker日期是一个必要条件,而不是一个错误。使用Apple的UICatalog应用程序,当您将日期设置为今天一次,然后在日期和时间模式之间切换时,它们的应用程序会表现出完全相同的行为。日期保留,但时间重置为00:00。如果切换到日期或时间以外的模式并切换回来,所有模式将被重置为其楼层值。