objective-c - 听到keyUp事件了吗? : Overridden NSView method

标签 objective-c cocoa event-handling nsview nsevent

更新:我现在正在重写从 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/

相关文章:

ios - 更改 NSManagedObject 的属性,它会发送通知吗?

ios - 如何仅将 swift 函数公开给 objc

xcode - 无法在 xcode 8 中构建模块 Cocoa

objective-c - 如何在运行时以编程方式创建多分辨率(视网膜就绪)NSImage?

c# - C# 中的触发事件会阻止当前线程执行吗?

Objective-C block 作为返回类型

objective-c - 将 block 添加到非事件调度队列

php - 拉拉维尔。将参数传递给事件订阅者

c# - 如何从以编程方式生成的 SSIS 包中获取已处理的行数到调用应用程序?

objective-c - 使 NSView 调整大小而不调整其中包含的图像大小