正如标题所说,我想知道是否可以检测鼠标按钮是否已关闭。我尝试将此代码放在我的app delegate.m中,但没有成功。
- (void)mouseDown:(NSEvent *)theEvent
{
NSLog(@"hello world!");
}
快速谷歌搜索向我显示此方法仅适用于NSWindows。但是,大多数方法都可以检测鼠标位置是否被按下,如果是这样的话;我怎么能这样做?
答案 0 :(得分:7)
您可以使用NSEvent addGlobalMonitorForEventsMatchingMask
:
在您的控件中定义:
id mouseEventMonitor;
-(id)init{
mouseEventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask | NSRightMouseDownMask | NSOtherMouseDownMask)
handler:^(NSEvent *event){
NSLog(@"theEvent->%@",event);
//here you will receive the all mouse DOWN events
if (event.modifierFlags & NSCommandKeyMask)
{
NSLog(@"theEvent1->%@",event);
}else{
NSLog(@"theEvent2->%@",event);
}
}];
return self;
}
答案 1 :(得分:1)
可可事件监视器是可行的方法 您可以使用它们来跟踪视图层次结构之外的各种鼠标事件。
请查看Cocoa Event Handling Guide中的文档,了解有关如何使用它们的信息以及类似主题,如
答案 2 :(得分:0)
尽管您在问题中提到了 mouseDown
并接受了描述如何设置监视器的答案,但据我从问题的其余部分可以看出,您实际上并不需要一个事件按下鼠标按钮时触发,但只想检查鼠标按钮是否当前被按下。
NSEvent
has a class property 可以用于此:
[NSEvent pressedMouseButtons]
这将返回当前按下的鼠标按钮的索引:
<块引用>返回值 1 << 0 对应鼠标左键,1 << 1 对应鼠标右键,1<< n, n >=2 对应其他鼠标按键。