macos - NSDatePicker 操作方法未触发

标签 macos cocoa nsdatepicker

场景:

用户正在 NSDatePicker 中以文本形式输入日期,没有步进器(在 OS X 上),当他们按键盘上的回车键时,我希望发送一条消息到 Controller 。

NSTextField 中,我只需在 Interface Builder 中挂接操作,或从代码中设置它,当用户按 Enter 键时,操作消息将发送到目标。

日期选择器允许设置操作消息和目标,但我无法触发该操作。当我在日期选择器中按 Enter 键时,不会调用操作消息。

我是否做错了什么,或者是否有我必须使用的解决方法?如果需要的话,我不会反对对所涉及的任何类进行子类化。

最佳答案

NSDatePicker 不会处理或转发由 Return 或 Enter 键触发的按键事件。

解决方案是子类化 NSDatePicker 以获得 keyDown 中所需的行为:

#import "datePickerClass.h"

@implementation datePickerClass
- (void)keyDown:(NSEvent *)theEvent{
    unsigned short n = [theEvent keyCode];
    if (n == 36 || n == 76) {
       NSLog(@"Return key or Enter key");
        // do your action
        //
    } else { 
        [super keyDown:theEvent];// normal behavior
    }
}
@end

就是这样。

编辑:您也可以使用NSCarriageReturnCharacterNSEnterCharacter

NSString* const s = [theEvent charactersIgnoringModifiers];
unichar const key = [s characterAtIndex:0];
if (key == NSCarriageReturnCharacter || key == NSEnterCharacter) {

关于macos - NSDatePicker 操作方法未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590447/

相关文章:

cocoa - NSTableView 中 Check 类型的 NSButtonCell 不允许更改值

objective-c - 如何在 Xcode 中创建一个简单的 Objective-C 命令行项目

javascript - 检测 Mac OS X webkit 浏览器中的弹性滚动

php - 如何在 Mac OSX 上轻松切换 PHP 版本?

objective-c - 如何在我的项目中创建第二个目标来为 iOS 创建一个预填充的数据库

objective-c - 如何在 Objective-C 中使用一些 ruby

cocoa 日期选择器格式

objective-c - 空 NSDatePicker

applescript - 日期选择器显示问题(主线程问题?)

swift - 更改时更新 Swift NSTextfield 变量