【问题标题】:Possible to "reset" a UIDatePicker's highlighted month/day/year?可以“重置”UIDatePicker 突出显示的月/日/年吗?
【发布时间】:2009-02-20 02:46:32
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: iphone cocoa cocoa-touch uidatepicker


    【解决方案1】:

    存储第一个选择器的日期,例如存储日期。然后使用它的 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 代码可能正常工作(我没有看过),但使用属性会是更好的防御性编码。

    【讨论】:

    • 重置一个只包含数字格式的选择器怎么样?你如何让它回到零?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多