1

我有一个视图控制器,我正在重复使用它来编辑以前视图控制器的 TableView 中的单个对象(NSString、NSNumber、NSDate)。我松散地基于 Apple 的 SQLiteBooks 示例项目中的 EditingViewController。datePicker 在 nib 文件中实例化。

这里的问题是它在我设置的第一次约会时效果很好。但是,当在第二个日期再次调用时,它会在加载时正确显示我在其翻转器中编辑的下一个日期(?),但是,突出显示的(蓝色)月份、日期和年份是选择器第一次出现时的日期在第一次编辑之前显示。如何将这些突出显示的值设置为第二个日期对象的初始值或重置整个 UIdatePicker 实例。

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

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

4

2 回答 2

1

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

 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 代码可能正常工作(我没有看过),但使用属性会是更好的防御性编码。

于 2009-02-20T07:51:07.083 回答
0

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

如果你想公开属性,你只需要声明一个@property。对于私有实例变量,您可以忽略它。

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

于 2009-02-20T03:57:11.483 回答