objective-c - 从 addLocalMonitorForEventsMatchingMask 返回 nil : block doesn't suppress events

标签 objective-c macos cocoa nsevent

以下代码不会抑制我的应用程序中的鼠标拖动:

[NSEvent addLocalMonitorForEventsMatchingMask:NSLeftMouseDraggedMask handler:^(NSEvent *event) {
   return (NSEvent *)nil;
}];

我仍然可以在应用程序内拖动 UI 元素。据我所知,如果您在 block 内返回 nil ,该事件将不会被分派(dispatch)到应用程序。我错过了什么?

最佳答案

我不太确定“拖动 UI 元素”是什么意思,但我怀疑 the docs 中的这条注释:

Your handler will not be called for events that are consumed by nested event-tracking loops such as control tracking, menu tracking, or window dragging...

是解释。各种 NSResponder 子类,例如单击按钮时,输入 "private tracking loop"他们抓取所有事件,直到收到一个结束循环的特定事件。

您应该在该 block 内放置一条日志语句,并确保您确实在预期时收到了传入的事件。

关于objective-c - 从 addLocalMonitorForEventsMatchingMask 返回 nil : block doesn't suppress events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8277000/

相关文章:

iphone - 根据行数计算单元格高度?

swift 和macOS : Timer works with delay when app works in background

objective-c - 核心数据问题使用容器对分层数据进行建模

ios - 手机锁定时 AVSpeechSynthesizer 将无法工作

ios - 由于静态表格 View ,需要帮助更改侧边条码

python - 在 OS X 上安装 Pycurl 时出错

macos - 如何从目录 ID 和卷号中找到 FSRef?

swift - NSSegmentedControl - 放置在模糊 View 中时出现奇怪的外观

objective-c - GHUnit 用于集成测试 iOS 网络功能

iphone - 判断 NSString 的第一个字符是否为数字