我正在对此进行一些研究,我发现了 这一点 题.我实现了那里使用的代码,但什么都没发生.这是我正在使用的确切代码:
.h文件
#import <Cocoa/Cocoa.h>
@interface Test : NSView {
}
-(void)keyUp:(NSEvent*)event;
-(void)keyDown:(NSEvent*)event;
@end
Run Code Online (Sandbox Code Playgroud)
.m文件
#import "Test.h"
@implementation Test
- (void)keyDown:(NSEvent*)event {
NSLog(@"A key has been pressed");
switch( [event keyCode] ) {
case 126: // up arrow
case 125: // down arrow
case 124: // right arrow
case 123: // left arrow
NSLog(@"Arrow key pressed!");
break;
default:
NSLog(@"Key pressed: %@", event);
break;
}
}
@end
Run Code Online (Sandbox Code Playgroud)
怎么了?有什么东西我必须添加到界面?
编辑:嗯,确实发生了一些事情.我的电脑对我不利.而已.
嗨,我正在开发iphone应用程序,并希望在iphone中处理键盘事件.在Mac中,有一个NSEvent类可以处理键盘和鼠标事件,而在ios(iphone/ipad)中,NSEvent的对应物是UIEvent,它只处理触摸事件.我知道ios API不提供此功能,但我如何处理iphone中的关键事件?任何好的教程或者......开始......
我想从应用程序的任何窗口捕获关键事件,并将它们解释为Unicode.例如,如果用户键入Option-ee(在默认配置的美国英语键盘上),我想将其识别为"é".
我尝试捕获按键事件和调用-[NSEvent characters].但是,正如文档中所述,"此方法为死键返回一个空字符串,例如Option-e." 如果我键入Option-ee,则它不会为Option-e提供任何内容,而对于第二个e则为"e" .
有没有办法将一系列密码(from -[NSEvent keyCode])组合成Unicode字符?
或者为每个键入的Unicode字符(如Java的键控事件)接收事件的方法?
在我的游戏中,我需要使用鼠标来选择单位。
但是,我遇到了问题,因为我不知道如何获取相对于游戏而不是窗口的点击坐标。
例如,如果 Unit 1 位于游戏的 (0,0) 点,则它可能位于窗口上的任何点,具体取决于我如何平移和缩放窗口,但我希望鼠标单击返回 (0,0 ) 无论我如何移动窗口,只要我点击同一个位置。
现在我正在使用:
override func mouseDown(with event: NSEvent) {
eventPos = event.location(in: self)
...
}
Run Code Online (Sandbox Code Playgroud)
(其余代码与鼠标单击位置无关)。
这一切都在 GameScene 中,它是一个 SKScene。那么如何获取鼠标点击的相对于 GameScene 的位置呢?
我正试图在按钮上显示鼠标按下弹出菜单.鼠标按下时按钮应显示为按下,无论选择了任何菜单项,鼠标按下都会"按下".类似于Expose/Space Preference面板"+"按钮,用于添加应用程序.
到目前为止我尝试了3种方法:
单击按钮时发送操作.但是这里弹出菜单出现在鼠标上而不是鼠标按下
子类NSButton并覆盖mouseDown:.鼠标按下时出现弹出菜单,我可以选择任何菜单项.但是当弹出菜单消失时,按钮出现了按下状态.因此,我需要再次单击以"取消"按钮,然后才能再次执行相同的操作.
NSEvent addLocalMonitorForEventsMatchingMask.类似的行为2.
有什么建议吗?我猜方法2或3是正确的方法,只需要在鼠标上"按下"按钮.
我想知道NSEvent是否响应键盘上的"Shift"键.我正在调试我的应用程序时记录keyCodes,并且我没有获得shift键的keyCode值.
谢谢,
凯文
编辑:这是我从用户响应中使用的代码.
-(void)keyDown:(NSEvent*)event
{
if ([event modifierFlags] == NSShiftKeyMask) {
NSLog(@"Shift key pressed");
}
}
Run Code Online (Sandbox Code Playgroud)
Shift键仍未被识别...
我知道这个问题之前已被问过很多,但没有什么能对我有用.以下代码根本不会做任何事情.
- (void) mouseDown:(NSEvent*)event {
NSLog(@"It worked!");
}
Run Code Online (Sandbox Code Playgroud)
我尝试了很多不同的方法来实现这一点,包括NSEvents以这种方式创建自定义:
NSEvent *someEvent;
- (void) mouseDown:(NSEvent*)someEvent {
NSLog(@"It worked!");
}
Run Code Online (Sandbox Code Playgroud)
这是我的.h文件:
@interface test : NSWindow <NSWindowDelegate> {
}
Run Code Online (Sandbox Code Playgroud)
有人会解释如何做这件事吗?
我有一个简单的应用程序,它有一个NSSearchField,我想知道用户是否按下,例如,箭头键.我不想继承子类,因为我想在我的应用程序中修改IBOutlets的值,而我不能在子类中这样做.
编辑
keyUp:我在NSSearchField子类中重写的方法是:
-(void)keyUp:(NSEvent*)event
{
if ([event keyCode]==36){
customers* c= [[customers alloc] init];//customers is the class where i have my IBOulets and my methods
[[self window] selectKeyViewFollowingView:self];// change the first responder
[c searcht:[self stringValue]];//here i want to call a method to make a query and change the stringValues of some IBOulets
}
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个NSButton类,当滚动我的按钮时,它很高兴地检测到mouseEntered和mouseExited事件.但是只要mouseDown事件发生,只要鼠标停止,鼠标按钮被抬起就不再调用mouseEntered事件.
因此,当调用mouseDown事件时,不再调用mouseEntered或MouseExited事件,也不会在滚动其他按钮时调用mouseDown,直到我放开了初始mouseDown.
因此,我想检测鼠标何时进入鼠标的时间.
希望你理解,并希望你能帮助阻止这一点.如果有更多细节会有所帮助,请告诉我.
我正在开发一个 MacOS 菜单栏应用程序,它需要跟踪一些全局快捷方式,以便于调整外部显示器上的显示亮度。但是,我无法让它在任何键盘相关事件上触发处理程序(鼠标事件工作得很好)。
我正在使用以下代码检查可访问性
NSDictionary *options = @{CFBridgingRelease(kAXTrustedCheckOptionPrompt): @YES};
BOOL accessibilityEnabled = AXIsProcessTrustedWithOptions((CFDictionaryRef)options);
Run Code Online (Sandbox Code Playgroud)
然后,我使用以下方法添加全局事件监视器:
self.eventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSEventMaskKeyDown handler:^(NSEvent * event) {
NSLog(@"Some event");
}];
Run Code Online (Sandbox Code Playgroud)
如果我切换NSEventMaskKeyDown到鼠标NSEventMaskMouseMove或其他与鼠标相关的东西,一切都会正常。如果我尝试NSEventMaskAny,不会再次触发任何内容(这看起来很奇怪,因为它仍然应该在鼠标上触发)。
nsevent ×10
cocoa ×6
objective-c ×6
macos ×3
mouseevent ×2
appkit ×1
arrow-keys ×1
ios ×1
iphone ×1
keydown ×1
mouse ×1
nsbutton ×1
skscene ×1
sprite-kit ×1
swift ×1
unicode ×1