识别用户在编辑 NSTextField 时是否按下箭头键 swift
Recognize if user has pressed arrow key while editing NSTextField swift
我有很多 NSTextField,我想知道用户在编辑其中一个时是否按下了其中一个箭头键。函数
override func keyDown(theEvent: NSEvent) {
switch theEvent.character {
case NSRightArrowFunctionKey:
println(1)
moveGor(NSRightArrowFunctionKey)
case NSLeftArrowFunctionKey:
moveGor(NSLeftArrowFunctionKey)
case NSUpArrowFunctionKey:
moveVert(NSUpArrowFunctionKey)
case NSDownArrowFunctionKey:
moveVert(NSDownArrowFunctionKey)
default:
super.keyDown(theEvent)
}
}
好像不行。在 swift 中还有其他方法吗?
编辑:
我有 NSEvent
的扩展名:
extension NSEvent {
var character: Int {
let str = charactersIgnoringModifiers!.utf16
return Int(str[str.startIndex])
}
}
我在之前的函数中使用的
当文本字段获得焦点时,它们实际上并没有。相反,文本 view 被添加到文本字段顶部的 window 并且该文本视图是第一响应者并处理所有输入和编辑行为。文本视图被称为 "field editor"。文本字段不接收按键事件;文本视图。
您可以将自定义文本视图替换为文本字段的第一响应者,并让该文本视图专门处理按键按下事件。但是,利用文本字段是文本视图的委托这一事实可能更容易。根据您要实现的目标,您可能会实施 -textView:willChangeSelectionFromCharacterRange:toCharacterRange:
,但这不仅仅与箭头键有关。
一个更有希望的方法可能是 -textView:doCommandBySelector:
。这也与箭头键无关,但在某些方面它更好。箭头键和所有其他标准编辑键通过 the key bindings system 转换为命令选择器进行操作。命令选择器表示正在执行的语义操作,如 -moveUp:
。它们由修饰符标志更改,因此 Shift-up-arrow 可能会生成 -moveUpAndModifySelection:
.
无论如何,在 -textView:doCommandBySelector:
中,您可以根据选择器执行代码并告诉文本视图不要做任何其他事情(通过 returning YES
)或者让文本视图另外做它的正常事情(通过 returning NO
)。 (显然,return NO
对于您不关心的任何内容。)
我有很多 NSTextField,我想知道用户在编辑其中一个时是否按下了其中一个箭头键。函数
override func keyDown(theEvent: NSEvent) {
switch theEvent.character {
case NSRightArrowFunctionKey:
println(1)
moveGor(NSRightArrowFunctionKey)
case NSLeftArrowFunctionKey:
moveGor(NSLeftArrowFunctionKey)
case NSUpArrowFunctionKey:
moveVert(NSUpArrowFunctionKey)
case NSDownArrowFunctionKey:
moveVert(NSDownArrowFunctionKey)
default:
super.keyDown(theEvent)
}
}
好像不行。在 swift 中还有其他方法吗?
编辑:
我有 NSEvent
的扩展名:
extension NSEvent {
var character: Int {
let str = charactersIgnoringModifiers!.utf16
return Int(str[str.startIndex])
}
}
我在之前的函数中使用的
当文本字段获得焦点时,它们实际上并没有。相反,文本 view 被添加到文本字段顶部的 window 并且该文本视图是第一响应者并处理所有输入和编辑行为。文本视图被称为 "field editor"。文本字段不接收按键事件;文本视图。
您可以将自定义文本视图替换为文本字段的第一响应者,并让该文本视图专门处理按键按下事件。但是,利用文本字段是文本视图的委托这一事实可能更容易。根据您要实现的目标,您可能会实施 -textView:willChangeSelectionFromCharacterRange:toCharacterRange:
,但这不仅仅与箭头键有关。
一个更有希望的方法可能是 -textView:doCommandBySelector:
。这也与箭头键无关,但在某些方面它更好。箭头键和所有其他标准编辑键通过 the key bindings system 转换为命令选择器进行操作。命令选择器表示正在执行的语义操作,如 -moveUp:
。它们由修饰符标志更改,因此 Shift-up-arrow 可能会生成 -moveUpAndModifySelection:
.
无论如何,在 -textView:doCommandBySelector:
中,您可以根据选择器执行代码并告诉文本视图不要做任何其他事情(通过 returning YES
)或者让文本视图另外做它的正常事情(通过 returning NO
)。 (显然,return NO
对于您不关心的任何内容。)