我只想在 NSDatePicker 中显示年份组件。
我尝试将 NSDateFormatter 设置/添加到 NSDatePicker,但没有运气。(通过将 NSDateFormatter 拖到 nib 中的 NSDatePicker 中)
有没有办法在不继承 NSDatePicker 或 NSTextField 的情况下实现这一点?谢谢!
我只想在 NSDatePicker 中显示年份组件。
我尝试将 NSDateFormatter 设置/添加到 NSDatePicker,但没有运气。(通过将 NSDateFormatter 拖到 nib 中的 NSDatePicker 中)
有没有办法在不继承 NSDatePicker 或 NSTextField 的情况下实现这一点?谢谢!
在深入了解 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 位:日。
4 位:时区。
3 位:小时。
2 位:分钟。
1位:秒。
0 位:未知。也许毫秒,或未使用。
因此,以下行将为我提供仅一年的日期选择器:
[_yearOnlyDatePicker setDatePickerElements:0x0080];
_yearOnlyPicker
是 NSDatePicker 的一个实例。
结果如下:
yearOnlyDatePicker
Interface Builder 中的样子:
运行应用程序yearOnlyDatePicker
时的样子:
很容易你不需要使用 NSDatePicker。您所要做的就是创建一个您想要的年份范围并将其用作datasource
普通选择器。
for (int i=1900; i<=currentYear; i++) {
[_yourDataSourceArr addObject:[NSString stringWithFormat:@"%d",i]];
}
-[NSDatePicker setDatePickerElements:]
不能再被欺骗只显示年份。
可以通过配置年月选择器并继承 NSDatePickerCell 以防止它创建月份和分隔符字段来获得仅限年份的 NSDatePicker:
- (void)_addSubfieldForElement:(int)arg1 withDateFormat:(id)arg2 referenceStrings:(id)arg3
{
if ((arg1 == 6) || (arg1 == 100)) {
return;
}
[super _addSubfieldForElement:arg1 withDateFormat:arg2 referenceStrings:arg3]; // Private API
}
请向 Apple 提交错误报告,以请求仅一年的 NSDatePicker 变体。我还请求了一年中的一周选择器。