在 Swift 中停止收听 NSEvent
Stop listening to NSEvent in Swift
我正在尝试让 NSEvent 停止监听本地事件。有没有办法在创建事件后访问它?(这是我在 removeEvent
中尝试失败的方法)
override func viewDidLoad() {
super.viewDidLoad()
NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: sayHello(event:))
}
func sayHello(event: NSEvent) -> NSEvent {
print("Welcome")
return event
}
@IBAction func removeEvent(_ sender: NSButton) {
let event = NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: sayHello(event:))
NSEvent.removeMonitor(event)
}
只需创建对事件监视器的引用,将实例 属性 添加到视图控制器并使用按钮操作将其删除:
var monitor: Any?
func sayHello(_ event: NSEvent) -> NSEvent {
print(#function)
return event
}
override func viewDidLoad() {
super.viewDidLoad()
monitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: sayHello)
}
@IBAction func removeEvent(_ sender: NSButton) {
if let monitor = monitor {
NSEvent.removeMonitor(monitor)
}
}
我正在尝试让 NSEvent 停止监听本地事件。有没有办法在创建事件后访问它?(这是我在 removeEvent
中尝试失败的方法)
override func viewDidLoad() {
super.viewDidLoad()
NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: sayHello(event:))
}
func sayHello(event: NSEvent) -> NSEvent {
print("Welcome")
return event
}
@IBAction func removeEvent(_ sender: NSButton) {
let event = NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: sayHello(event:))
NSEvent.removeMonitor(event)
}
只需创建对事件监视器的引用,将实例 属性 添加到视图控制器并使用按钮操作将其删除:
var monitor: Any?
func sayHello(_ event: NSEvent) -> NSEvent {
print(#function)
return event
}
override func viewDidLoad() {
super.viewDidLoad()
monitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: sayHello)
}
@IBAction func removeEvent(_ sender: NSButton) {
if let monitor = monitor {
NSEvent.removeMonitor(monitor)
}
}