You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI macOS:如何实现全局修饰键+点击/强制触控事件

在macOS SwiftUI中全局监听鼠标/触控板事件的方案

一、全局监听带修饰键的鼠标点击(如Command+Click)

SwiftUI本身没有原生的全局事件监听API,需要借助AppKit的NSEvent.addGlobalMonitorForEvents(matching:handler:)实现系统级事件监听。这个方法能在应用前台或后台状态下捕获事件,但需注意:应用必须获得辅助功能权限,否则后台监听会失效。

示例代码:

import SwiftUI

@main
struct GlobalClickMonitorApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onAppear {
                    // 监听左键按下事件,检测Command修饰键
                    NSEvent.addGlobalMonitorForEvents(matching: .leftMouseDown) { event in
                        if event.modifierFlags.contains(.command) {
                            print("Command+左键点击触发")
                            // 在这里添加你的业务逻辑
                        }
                    }
                    
                    // 监听右键点击(含Control+Click模拟右键)
                    NSEvent.addGlobalMonitorForEvents(matching: .rightMouseDown) { _ in
                        print("右键点击触发")
                    }
                }
        }
    }
}
  • 该方法不会拦截事件,系统仍会将事件传递给当前活跃应用;若需拦截事件,改用NSEvent.addLocalMonitorForEvents(matching:handler:),但此方法仅能监听应用自身的事件,不具备全局能力。

二、监听Force Touch事件

Force Touch的监听同样依赖NSEvent,通过读取事件的pressure属性判断是否是重压操作:

// 先判断设备是否支持Force Touch
if NSTouchPressureCapabilities.pressureCapabilities.contains(.force) {
    NSEvent.addGlobalMonitorForEvents(matching: .leftMouseDown) { event in
        // 阈值可根据设备实际情况调整,通常大于0.5即为重压
        if event.pressure > 0.5 {
            print("Force Touch触发")
        }
    }
}

三、权限配置说明

全局事件监听需要用户授予辅助功能权限,首次运行时系统会自动弹出权限请求。需在应用的Info.plist中添加NSAccessibilityUsageDescription键,填写权限申请的原因(例如“需要监听全局鼠标事件以提供快捷操作”),否则权限请求会被系统拒绝。

四、局部视图内的事件监听(非全局场景)

如果仅需在SwiftUI视图范围内监听这类事件,无需全局监听的话,可直接使用onTapGesture结合修饰键:

ContentView()
    .onTapGesture(modifiers: .command) {
        print("视图内Command+Click触发")
    }

内容的提问来源于stack exchange,提问作者lizard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:35:26