Datepicker 如何允许箭头键操作图形化NSDATECIPKER?
这似乎很简单,但很重要 将NSDatePicker(样式:图形)放入窗口中,构建并运行,然后尝试使用箭头键四处移动。唯一的反应是计算机发出的“叮”声 我在一个简单的自定义NSDatePicker子类中重写了Datepicker 如何允许箭头键操作图形化NSDATECIPKER?,datepicker,nsresponder,nsdatepicker,Datepicker,Nsresponder,Nsdatepicker,这似乎很简单,但很重要 将NSDatePicker(样式:图形)放入窗口中,构建并运行,然后尝试使用箭头键四处移动。唯一的反应是计算机发出的“叮”声 我在一个简单的自定义NSDatePicker子类中重写了-keydown,并打印了该事件,注意到它们具有123到126的对应键代码 然后,我偶然发现在每次按下箭头按钮后,在-keydown内重置日期选择器的日期,如下所示: - (void)keyDown:(NSEvent *)theEvent switch ([[theEvent valu
-keydown
,并打印了该事件,注意到它们具有123到126的对应键代码
然后,我偶然发现在每次按下箭头按钮后,在-keydown
内重置日期选择器的日期,如下所示:
- (void)keyDown:(NSEvent *)theEvent
switch ([[theEvent valueForKey:@"keyCode"] integerValue]) {
case 126:
// Take away one week from the date
self.dateValue = [NSDate dateWithTimeInterval:-604800 sinceDate:self.dateValue];
break;
.... similar for 125 - 123 ...
}
}
实现此方法的副作用是取消单步遍历对象的“tab”键
这似乎是个大工程。日期选择器中是否已经包含了其他方法???我意识到这个问题非常古老,但我只是在研究这个问题,所以。。。 下面的方法适合我
- (void)keyDown:(NSEvent *)theEvent
{
NSString* replacementKey = nil;
switch ([theEvent keyCode])
{
case 123: // Left arrow
replacementKey = @"-";
break;
case 124: // Right arrow
replacementKey = @"+";
break;
case 125: // Down arrow
replacementKey = @"]";
break;
case 126: // Up arrow
replacementKey = @"[";
break;
case 53: // esc
case 36: // return -- don't assign replacement key and these will dismiss date picker
break;
default:
replacementKey = [theEvent charactersIgnoringModifiers];
break;
}
if (replacementKey) // 'letter' based shortcut keys
{
[self.textFieldCell dateShortcut:replacementKey];
[self updateGraphicalCalendar];
}
else
{
[self.textFieldCell hidegraphicCalendar];
}
}
注意:这适用于与自定义NSTextFieldCell关联的图形日期选择器。自定义textfieldcell通过修改选定日期来处理快捷键(“替换键”),如:
if (NSOrderedSame == [shortcut caseInsensitiveCompare:@"+"] || NSOrderedSame == [shortcut caseInsensitiveCompare:@"="]) // '=' is unshifted '+'
{
emptyComponents.day = 1;
currentDateValue = [calendar dateByAddingComponents:emptyComponents toDate:currentDateValue options:0];
}
else if (NSOrderedSame == [shortcut caseInsensitiveCompare:@"-"])
{
emptyComponents.day = -1;
currentDateValue = [calendar dateByAddingComponents:emptyComponents toDate:currentDateValue options:0];
}
else if (NSOrderedSame == [shortcut caseInsensitiveCompare:@"["]) // same day in previous week
{
emptyComponents.day = -7;
currentDateValue = [calendar dateByAddingComponents:emptyComponents toDate:currentDateValue options:0];
}
else if (NSOrderedSame == [shortcut caseInsensitiveCompare:@"]"]) // same day in next week
{
emptyComponents.day = 7;
currentDateValue = [calendar dateByAddingComponents:emptyComponents toDate:currentDateValue options:0];
}
有答案总比没有好!我感谢您添加解决方案。