3

更新:我现在从 NSView 子类覆盖 NSView keyUp 方法,设置为如下所示的第一响应者,但我仍然没有看到它被调用的证据。

@implementation svsView

- (BOOL)acceptsFirstResponder {
    return YES;
}

- (void)keyUp:(NSEvent *)event {
  //--do key up stuff--
  NSLog(@"key up'd!");
}

@end

--ORIGINAL POST-- 我是 Cocoa 和 Obj-C 的新手,我正在尝试从我的控制器类(它本身是 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 仅在按键按下而不是时被调用释放时。(我想会发生这种情况。)

请原谅我的菜鸟,但我应该把这个方法放在另一个班级还是做一些不同的事情?不过,无论它在哪里,我都需要它能够访问控制器类拥有的对象。

感谢您提供的任何见解。

4

2 回答 2

2

NSResponder 子类(例如 NSView 的自定义子类)处理关键事件。它们甚至可以处理更多抽象级别的事件,例如“向左/向右移动”、“插入换行符”等。然后它们可以向控制器发送消息以做出相应的响应。

于 2009-12-06T05:25:45.820 回答
1

Wow! I think I've nailed it. I just needed to instantiate my subclass with a NSView/NSWindow reference to the class in IB. Wasn't actually creating an instance of it in the UI. The past several hours down the crapper! Sans that I learned a thing or two along the way. ;)

于 2009-12-06T11:11:27.017 回答