2017-09-02 57 views
1

我想檢測我的NSViewController中的鍵盤輸入。 這個想法是,如果用戶按下某些鍵,然後按ENTER/RETURN鍵,就會執行一些操作。Swift中檢測NSViewController中keyboad輸入的最佳策略

我檢查了keyDown是否合適。但是,只要用戶按下某個鍵,我就會收到一個事件。

我也有使用NSTextField,將其設置爲隱藏,並讓它有焦點。 但也許還有其他更好的解決方案。

任何想法?

謝謝

回答

0

我終於找到了我喜歡的解決方案。 首先,它沒有任何待辦事項與任何隱藏的UI元素,而是讓ViewController檢測鍵盤輸入。

var monitor: Any? 
var text = "" 
override func viewDidLoad() { 
    super.viewDidLoad() 
    self.monitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown, handler: myKeyDownEvent) 
} 

override func viewWillDisappear() { 
    //Clean up in case your ViewController can be closed an reopened 
    if let monitor = self.monitor { 
     NSEvent.removeMonitor(monitor) 
    } 
} 

// Detect each keyboard event 
func myKeyDownEvent(event: NSEvent) -> NSEvent { 
    // keyCode 36 is for detect RETURN/ENTER 
    if event.keyCode == 36 { 
     print(text) 
     text = "" 
    } else { 
     text.append(event.characters!) 
    } 
    return event 
}