Я недавно задал этот вопрос и использовал addGlobalMonitorForEventsMatchingMask, как предлагает Дэйв Делонг, на что указал мне @ NSGod.
У меня были проблемы с определением синтаксиса блока, хотяЯ приведу цитату из кода, который я отправил в ответ:
// register for keys throughout the device...
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(struct NSEvent *event){
NSString *chars = [[event characters] lowercaseString];
unichar character = [chars characterAtIndex:0];
NSLog(@"keydown globally! Which key? This key: %c", character);
}];
Следует помнить о блоках, которые передаются непосредственно в вызов метода.У меня есть более подробное описание, добавленное к моему собственному вопросу , но если вы следуете приведенному выше синтаксису и думаете о блоке как о «встроенном методе делегата», вам следует поступить просто отлично.