更新:我现在正在重写从 NSView 子类设置为第一响应者的 NSView keyUp 方法,如下所示,但我仍然没有看到它被调用的证据。
@implementation svsView
- (BOOL)acceptsFirstResponder {
return YES;
}
- (void)keyUp:(NSEvent *)event {
//--do key up stuff--
NSLog(@"key up'd!");
}
@end
--原帖-- 我是 Cocoa 和 Obj-C 的新手,正在尝试从我的 Controller 类(它本身是 NSController 类型)的实现中执行 (void)keyUp:。不过,我不确定这是否是放置它的正确位置。我有一系列类似的按钮,每个按钮都设置为一个唯一的等效键(IB 按钮属性),每个按钮都调用我的 (IBAction)keyInput 方法,该方法然后将每个键的标识传递给另一个对象。这运行得很好,但我还想跟踪每个键的释放时间。
--原始[坏]示例--
@implementation svsController
//init
//IBActions
- (IBAction)keyInput:(id)sender {
//--do key down stuff--
}
- (void)keyUp:(NSEvent *)event {
//--do key up stuff--
}
@end
失败后,我还尝试将 keyUp 作为 IBAction(而不是 void),就像用户定义的 keyInput 一样,并将其连接到 Interface Builder 中的相应按钮,但仅当键被调用时才调用 keyUp下来而不是在释放时。 (我觉得这会发生。)
请原谅我的笨拙,但我应该将此方法放在另一个类中还是做一些不同的事情?但是,无论它在哪里,我都需要它能够访问 Controller 类拥有的对象。
感谢您提供的任何见解。
最佳答案
NSResponder 子类(例如 NSView 的自定义子类)处理按键事件。它们甚至可以处理更多抽象级别的事件,例如“向左/向右移动”、“插入换行符”等。然后它们可以向 Controller 发送消息以作出相应响应。
关于objective-c - 听到keyUp事件了吗? : Overridden NSView method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1854112/