ios - Objective-c-键盘输入

标签 ios objective-c macos input keyboard

我相信我已经阅读了所有与键盘输入相关的文章,但仍然无法正常工作。我想要的只是一个输出,每次我按下一个键时都使用 NSLog,无论是否在应用程序中。我目前正在使用 xcode 5。我尝试了许多代码片段,例如

[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event)
    NSLog(@"%@",event.characters);

而且我不确定将他的代码放在哪里。像这样放在main函数里吗

 #import <Foundation/Foundation.h>
#import <appkit/NSEvent.h>

int main(int argc, char * argV[]) {
@autoreleasepool{
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event)
    NSLog(@"%@",event.characters);
 }
}

显然我是 Objective-C 的新手,除非我可以让键盘输入正常工作,否则我不打算继续使用它。我试过教程、键盘记录器的片段和 mac 开发论坛。谢谢。

最佳答案

您的代码非常接近,但您被 block 语法挂断了。 block 非常强大和有用,但语法真的很糟糕,在开始使用它们 2 年后我仍然在为它而苦苦挣扎。 block 的可读性远不如 C 函数指针,这说明了很多。

它应该是这样的:

int main(int argc, char * argV[]) 
{
  @autoreleasepool
  {
    [NSEvent addGlobalMonitorForEventsMatchingMask: NSKeyDownMask 
            handler: ^(NSEvent *event)
      {
        NSLog(@"%@",event.characters);
      }
    ];
  }
}

为了清楚起见,我将所有的左大括号和右大括号放在不同的行中。一个 block 需要用大括号括起来,而您缺少大括号以及调用 addGlobalMonitorForEventsMatchingMask:handler:

时的右括号

顺便说一句,在 Mac 或 iOS 程序上更改 main() 函数是非常不寻常的。通常你不去管它,然后设置一个应用程序对象,设置一个委托(delegate),并将你的自定义代码放在应用程序委托(delegate)中。

您应该开始为应用程序使用普通的 Cocoa 设计模式,而不是尝试折腾它们。

如果您想以 C 风格使用 main(),您应该考虑创建一个用于交互式应用程序的命令行工具。如果您不遵循标准模式,您将注定失败。出错的方法太多了。

您的 main 缺少创建工作 iOS 或 Mac 应用程序所需的内务管理

关于ios - Objective-c-键盘输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25776711/

相关文章:

windows - OpenSSL的交叉编译

macos - Mac Audio随机删除-有想法吗?

php - 在 Swift2 中发送 php POST 请求需要很长时间

ios - UIApplicationExitOnSuspend 用于挂起而不是后台

ios - 动画时移动 Action

ios - 是否可以使用核心蓝牙概念检测正常信标?

ios - 如何删除或替换字符串中的所有标点符号?

iOS:在哪里可以找到 iOS OSStatus 代码的完整列表?

ios - 生成具有给定分布的随机数

objective-c - UITableView 设置选中行刷新控件