可以“重置”UI DatePicker突出显示月/日/年?

时间:2009-02-20 02:46:32

标签: iphone cocoa cocoa-touch uidatepicker

我有一个View Controller我正在重用在以前的View Controller的TableView中编辑单个对象(NSString,NSNumber,NSDate)。我基于Apple的SQLiteBooks示例项目中的EditingViewController松散地做了这件事。 datePicker在nib文件中实例化。

这里的问题是它运作良好&花花公子为我设置的第一次约会。但是,当在第二个日期再次调用时,它将正确显示我在其加载时在其滚筒(?)中编辑的下一个日期,然而,突出显示的(蓝色)月,日和日期。年份是在第一次编辑之前首次显示选择器的那些年份。如何将这些突出显示的值设置为第二个日期对象的初始值或重置整个UIdatePicker实例。

第二个相关问题(奖励积分;-)因为我很难绕过Cocoa:为什么在SQLiteBooks示例中没有在EditingVewController.h中声明的datePicker的@property或@synthesize语句?或者我忽略了显而易见的事情?谢谢!

编辑:使用UIDatePickers对其他应用程序进行一些实验后,无论出于何种原因,UIDatePicker在日期模式下使用时都会突出显示当前月份,日期和时间。即使您正在编辑1776年的约会日期。我们如何关闭此行为?

2 个答案:

答案 0 :(得分:1)

存储来自第一个选择器的日期,例如storedDate。然后使用其date属性设置要在UIDatePicker中显示的日期。假设你的UIDatePicker被命名为picker,然后是

 picker.date = storedDate; // picker's date is initialised to today's date/time

如果您希望选择器设置为您的日期动画,也可以使用此方法:

[picker setDate:storedDate animated:YES];

至于属性,它们不应仅用于公共数据。属性是指通过方法访问的数据,而不是通过实例变量直接访问的数据。属性声明(特别是@synthesize)告诉编译器使用这些声明来根据需要自动生成访问器方法以满足类的接口。

Objective-C中的点语法由编译器转换为访问器方法的调用。所以......

foo.bar = @"hello";

由编译器翻译为......

[foo setBar:@"hello"];

setBar,也是生成的,将根据其@property声明执行所有操作。因此,如果它被声明为retain,它将被正确保留在其setter中,而不必担心它。

因此,总而言之,虽然您提到的Apple代码可能正常工作(我没有看过),但使用属性的防御性编码会更好。

答案 1 :(得分:0)

  

第二个相关问题(奖励积分;-)因为我很难绕过Cocoa:为什么在SQLiteBooks示例中没有在EditingVewController.h中声明的datePicker的@property或@synthesize语句?或者我忽略了显而易见的事情?谢谢!

如果要将属性设为公共属性,则只需声明@property。对于私有实例变量,请将其保留。

@synthesize只是让编译器为你的@property创建访问器方法,所以如果它不是@property,你就不要使用@synthesize(或@dynamic)。