我搜索了整个互联网上的东西没有运气。我试图检测用户是否在Mac应用上点击空格键。在Mac上检测空格键事件?
-(void)keyDown:(NSEvent*)theEvent;
当用户按下字符键,但没有输入或空格时效果很好。
-(BOOL)performKeyEquivalent:(NSEvent *)theEvent;
当用户点击回车键或方向键而不是空格键时被调用。
任何想法?
我搜索了整个互联网上的东西没有运气。我试图检测用户是否在Mac应用上点击空格键。在Mac上检测空格键事件?
-(void)keyDown:(NSEvent*)theEvent;
当用户按下字符键,但没有输入或空格时效果很好。
-(BOOL)performKeyEquivalent:(NSEvent *)theEvent;
当用户点击回车键或方向键而不是空格键时被调用。
任何想法?
能得到它的工作通过继承NSWindow和实施此方法:
- (void)sendEvent:(NSEvent *)theEvent
{
NSString* keysPressed = [theEvent characters];
if ([keysPressed isEqualToString:@" "])
{
if(theEvent.type==NSKeyDown)
NSLog(@"spaceDown");
if(theEvent.type==NSKeyUp)
NSLog(@"spaceUp");
}
}
您可以根据空格键常量使用其他循环与键号码32。
if ([theArrow length] == 1)
{
keyChar = [theArrow characterAtIndex:0];
NSLog(@"Dentro2 %hu", keyChar);
switch (keyChar)
{
case 32: // Space Bar management
break;
}
}
// Manage when any key is dropped.
if(downOrUp == FALSE)
{
NSLog(@"Tecla soltada.");
self.playerVelocity = CGPointMake(0.0, 0.0);
}
// Methods to handle key push and key drop
- (void)keyDown:(NSEvent *)event
{
[self handleKeyEvent:event keyDown:YES];
}
- (void)keyUp:(NSEvent *)event
{
[self handleKeyEvent:event keyDown:NO];
}
如果你#include
我不由自主地绊了一下。奇怪的是,keyDown:
事件仅通过moby所述的方法检测到。但是keyUp:
作品像空格键按下一个魅力
尝试几个解决方案后,我带着一个din't打破其他东西对我来说
@import Carbon;
typedef void (^CustomWindowSpacebarKeyCallback)(NSEventType eventType);
@interface CustomWindow : NSWindow
@property (nonatomic, copy) CustomWindowSpacebarKeyCallback spacebarKeyCallback;
@end
@implementation CustomWindow
- (void) sendEvent:(NSEvent *)theEvent
{
[super sendEvent:theEvent];
if (([theEvent type] == NSKeyDown || [theEvent type] == NSKeyUp) && _spacebarKeyCallback) {
NSString *keysPressed = [theEvent characters];
if ([keysPressed length] == 1) {
unichar keyChar = [keysPressed characterAtIndex:0];
if (keyChar == kSpaceCharCode) {
_spacebarKeyCallback([theEvent type]);
}
}
}
}
@end
虽然这个解决方案引起了很多其他问题,因此,如果任何人都知道另一种方式,请分享。 – Snowman 2012-01-16 17:02:14
你有什么发现? – 2012-12-14 18:27:03