更新:我现在将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放下而不是释放时。 (我认为会发生这种情况。)
原谅我的努力,但是我应该把这种方法放在另一个班级或做些不同的事情吗?但是,无论它在哪里,我都需要它能够访问控制器类拥有的对象。
感谢您的任何见解。
答案 0 :(得分:2)
NSResponder子类(例如NSView的自定义子类)处理键事件。他们甚至可以处理更多抽象级别的事件,例如“向左/向右移动”,“插入换行符”等。然后他们可以向控制器发送消息以做出相应的响应。
答案 1 :(得分:1)
哇!我想我已经钉了它。我只需要用IBView中的类的NSView / NSWindow引用来实例化我的子类。实际上并没有在UI中创建它的实例。过去几个小时下来了!我一路上学到了一两件事。 ;)