如何仅在NSDatePicker中显示年份

时间:2016-12-21 00:07:39

标签: objective-c macos nsdatepicker

我想仅在NSDatePicker中显示年份组件。

我尝试将NSDateFormatter设置/添加到NSDatePicker,但没有运气。 (通过在NSI中将NSDateFormatter拖动到NSDatePicker)

如果没有子类化NSDatePicker或NSTextField,有没有办法实现这个目的?谢谢!

3 个答案:

答案 0 :(得分:2)

在深入了解Apple的文档之后,我找到了解决方案并希望在此处发布,以防它对其他人有用。

不需要子类NSDatePicker,有一个方法- (void)setDatePickerElements:(NSDatePickerElementFlags)elementFlags,它指定日期选择器将显示的元素。 elementFlags 是一个常量,由枚举定义为:

enum {
   NSHourMinuteDatePickerElementFlag       = 0x000c,
   NSHourMinuteSecondDatePickerElementFlag = 0x000e,
   NSTimeZoneDatePickerElementFlag         = 0x0010,
   NSYearMonthDatePickerElementFlag        = 0x00c0,
   NSYearMonthDayDatePickerElementFlag     = 0x00e0,
   NSEraDatePickerElementFlag              = 0x0100,
};
typedef NSUInteger NSDatePickerElementFlags;

在查看这些常量时,我​​发现它只是一个掩码。位位置和相应的日历元素如下:

15 - 9位:未知。也许未使用。

8位:时代。 (如果有4位数的年份格式,则不会显示任何内容。)

7位:年份。

6位:月。

5位:Day。

4位:时区。

3位:小时。

2位:分钟。

1位:秒。

0位:未知。也许毫秒,或未使用。

所以,以下行会给我一年的日期选择器:

[_yearOnlyDatePicker setDatePickerElements:0x0080];

_yearOnlyPicker是NSDatePicker的一个实例。


结果如下:

Interface Builder中yearOnlyDatePicker的样子:

In interface builder.

运行应用时yearOnlyDatePicker的样子:

When running the app.

答案 1 :(得分:1)

您不需要使用NSDatePicker。您所要做的就是创建一个您想要的年份,并将其用作datasource作为普通选择器。

for (int i=1900; i<=currentYear; i++) {
  [_yourDataSourceArr addObject:[NSString stringWithFormat:@"%d",i]];
}

答案 2 :(得分:1)

pd.options.display.float_format = '{0:.2f}'.format 不再被诱使仅显示年份。

可以通过配置年份-月份选择器并将其子类化为NSDatePickerCell来防止创建月份和分隔符字段来获取仅年份的NSDatePicker:

-[NSDatePicker setDatePickerElements:]

请向Apple提交错误报告,以请求仅提供一年的NSDatePicker变体。我还要求一个每周一次的选择器。