如何在 NSTextView 中捕获 Alt + 向上箭头事件
How to catch an Alt + Up arrow event in NSTextView
我在 swift OS X 应用程序中使用 NSTextView。当用户按下 ctrl + 向上箭头时会发生一些事情。
我通过重写 NSTextView 的 onKeyDown 函数来做到这一点。
我的代码是这样的。
class MyTextView: NSTextView {
override func keyDown(with event: NSEvent) {
//NSLog(“event.keyCode=\(event.keyCode),modifierFlags=\(event.modifierFlags)”)
// Do something on Alt + Up
if event.keyCode == 126 && event.modifierFlags.rawValue == 11010336 {
// Do something…
}
}
这行得通,但是当大写锁定键打开时,它就停止工作了。
我猜是因为 event.modifierFlags.rawValue 不再等于 1010336.
我的问题是 - 是否有更优雅的方法来捕获 Alt + 向上箭头,同时指定 event.modifierFlags.rawValue == 11010336 和大写锁定打开时的事件值?
是的,还有更优雅的方式:
if event.keyCode == 126 && event.modifierFlags.contains(.control) {
或 ⌥ 键
if event.keyCode == 126 && event.modifierFlags.contains(.option) {
另一种方式:覆盖 moveToBeginningOfParagraph:
.
基于@Willeke 的回答,我认为正确的做法是 link 为文本视图创建一个 NSTextView 委托,然后处理以下内容。
func textView(_ textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool
{
if commandSelector == #selector(textView.moveToBeginningOfParagraph(_:))
{
// Do something and tell the view you have handled it
return true
}
return false // You haven't handled anything else
}
我在 swift OS X 应用程序中使用 NSTextView。当用户按下 ctrl + 向上箭头时会发生一些事情。
我通过重写 NSTextView 的 onKeyDown 函数来做到这一点。
我的代码是这样的。
class MyTextView: NSTextView {
override func keyDown(with event: NSEvent) {
//NSLog(“event.keyCode=\(event.keyCode),modifierFlags=\(event.modifierFlags)”)
// Do something on Alt + Up
if event.keyCode == 126 && event.modifierFlags.rawValue == 11010336 {
// Do something…
}
}
这行得通,但是当大写锁定键打开时,它就停止工作了。 我猜是因为 event.modifierFlags.rawValue 不再等于 1010336.
我的问题是 - 是否有更优雅的方法来捕获 Alt + 向上箭头,同时指定 event.modifierFlags.rawValue == 11010336 和大写锁定打开时的事件值?
是的,还有更优雅的方式:
if event.keyCode == 126 && event.modifierFlags.contains(.control) {
或 ⌥ 键
if event.keyCode == 126 && event.modifierFlags.contains(.option) {
另一种方式:覆盖 moveToBeginningOfParagraph:
.
基于@Willeke 的回答,我认为正确的做法是 link 为文本视图创建一个 NSTextView 委托,然后处理以下内容。
func textView(_ textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool
{
if commandSelector == #selector(textView.moveToBeginningOfParagraph(_:))
{
// Do something and tell the view you have handled it
return true
}
return false // You haven't handled anything else
}