听到keyUp事件?:重写NSView方法

时间:2009-12-06 02:03:11

标签: objective-c cocoa event-handling nsview nsevent

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

@implementation svsView

- (BOOL)acceptsFirstResponder {
    return YES;
}

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

@end

- 原始帖子 - 我是Cocoa和Obj-C的新手,我正在尝试从我的控制器类(它本身是NSController类型)的实现中做一个(void)keyUp :.不过,我不确定这是否适合放置它。我有一系列相似的按钮,每个按钮设置为一个唯一的等效键(IB按钮属性),每个按钮调用我的(IBAction)keyInput方法,然后将每个键的标识传递给另一个对象。运行得很好,但我也想跟踪每个密钥的发布时间。

- ORIGINAL [bad]示例 -

@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中的相应按钮,但是只有当key是密钥时才调用keyUp放下而不是释放时。 (我认为会发生这种情况。)

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

感谢您的任何见解。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

哇!我想我已经钉了它。我只需要用IBView中的类的NSView / NSWindow引用来实例化我的子类。实际上并没有在UI中创建它的实例。过去几个小时下来了!我一路上学到了一两件事。 ;)