在Swift中如何检测当前shift键是否处于按下状态?
Swift 实时检测Shift键按下状态实现方案
你不需要依赖keyDown/keyUp的事件回调,可以直接通过系统提供的修饰键状态接口实现,根据运行平台不同实现方式如下:
macOS 平台实现
直接调用NSEvent.modifierFlags即可实时获取当前的修饰键状态,可在任意函数执行时直接调用判断:
import AppKit func doThisThing() { if NSEvent.modifierFlags.contains(.shift) { print("Doing this thing.") } else { print("You're not holding shift.") } }
如果要封装为你示例中的调用形式,可以简单封装单例工具类:
class Keyboard { static let shared = Keyboard() private init() {} func keyBeingPressed(_ key: NSEvent.ModifierFlags) -> Bool { return NSEvent.modifierFlags.contains(key) } } // 调用效果和你示例完全一致 func doThisThing() { if Keyboard.shared.keyBeingPressed(.shift) { print("Doing this thing.") } else { print("You're not holding shift.") } }
iOS 平台实现(仅支持外接硬件键盘)
iOS 14及以上版本可以通过当前应用的活跃事件获取修饰键状态,仅在应用处于前台、有活跃交互响应链时可正常获取,不支持屏幕软键盘的shift状态检测:
import UIKit func doThisThing() { guard let currentModifierFlags = UIApplication.shared.currentEvent?.modifierFlags else { print("You're not holding shift.") return } if currentModifierFlags.contains(.shift) { print("Doing this thing.") } else { print("You're not holding shift.") } }
内容的提问来源于stack exchange,提问作者Ben216k
相关产品推荐
相关产品推荐

