我只想在NSDatePicker中显示年份组件。
我尝试过将set/add NSDateFormatter添加到NSDatePicker中,但没有成功。(通过在nib中将NSDateFormatter拖到NSDatePicker )
在不对NSDatePicker或NSTextField进行子类分类的情况下,有什么方法可以实现这一点吗?谢谢!
发布于 2018-07-16 16:00:09
-[NSDatePicker setDatePickerElements:]再也不能被骗到只显示年份了。
可以通过配置一年月选择器和子类NSDatePicker来防止它创建月份和分隔符字段,从而获得仅为一年的NSDatePickerCell:
- (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
}请向苹果提交错误报告,请求只使用一年版本的NSDatePicker。我还要求了一个为期一周的挑选者。
发布于 2016-12-26 03:46:26
在深入研究了苹果的文档之后,我找到了解决方案,并想在这里发布,以防它对其他人有用。
不需要子类NSDatePicker,有一个方法- (void)setDatePickerElements:(NSDatePickerElementFlags)elementFlags指定日期选择器将显示哪个元素。elementFlags是一个常量,由枚举定义为:
枚举{ NSHourMinuteDatePickerElementFlag = 0x000c,NSHourMinuteSecondDatePickerElementFlag = 0x000e,NSTimeZoneDatePickerElementFlag = 0x0010,NSYearMonthDatePickerElementFlag = 0x00c0,NSYearMonthDayDatePickerElementFlag = 0x00e0,NSEraDatePickerElementFlag = 0x0100,};
当我看到这些常量时,我发现它只是一个小掩码。位位置和相应的日历元素如下:
15-9位:未知。也许还没用过。
8位:时代。(如果有4位数的年份格式,则不会显示任何内容。)
7位:年份。
6位:月。
5位:一天。
4位:时区。
3位:小时。
2位:分钟。
1位:第二位。
0位:未知。可能是毫秒,或者是未使用的。
因此,下面的行将给我一年的日期选择器:
[_yearOnlyDatePicker setDatePickerElements:0x0080];_yearOnlyPicker是NSDatePicker的一个实例。
结果如下:
yearOnlyDatePicker在Interface中的样子:

运行该应用程序时,yearOnlyDatePicker是什么样子的:

发布于 2016-12-21 02:45:20
不需要使用NSDatePicker是很容易的。您所要做的就是创建一个您想要的年份范围,并将其用作普通选择器的datasource。
for (int i=1900; i<=currentYear; i++) {
[_yourDataSourceArr addObject:[NSString stringWithFormat:@"%d",i]];
}https://stackoverflow.com/questions/41253203
复制相似问题