gpt4 book ai didi

macos - 快速识别用户是否在编辑 NSTextField 时按下了箭头键

转载 作者:搜寻专家 更新时间:2023-11-01 06:23:17 25 4
gpt4 key购买 nike

我有很多 NSTextFields,我想知道,如果用户在编辑其中一个时按下了其中一个箭头键。功能

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)
}
}

好像不行。有没有其他方法可以快速做到这一点?

编辑:

我有 NSEvent 的扩展:

extension NSEvent {
var character: Int {
let str = charactersIgnoringModifiers!.utf16
return Int(str[str.startIndex])
}
}

我在之前的函数中使用过

最佳答案

当文本字段获得焦点时,它们实际上并没有。相反,文本 view 被添加到文本字段顶部的窗口中,并且该 TextView 是第一响应者并处理所有输入和编辑行为。 TextView 称为 "field editor" .文本字段不接收按键事件; TextView 。

您可以将自定义 TextView 替换为文本字段的第一响应者,并让该 TextView 专门处理按键按下事件。但是,利用文本字段是 TextView 的委托(delegate)这一事实可能更容易。根据您要实现的目标,您可以实现 -textView:willChangeSelectionFromCharacterRange:toCharacterRange:,但这不仅仅与箭头键有关。

更有希望的方法可能是 -textView:doCommandBySelector:。这也与箭头键无关,但在某些方面它更好。箭头键和所有其他标准编辑键通过翻译来操作 the key bindings system进入命令选择器。命令选择器表示正在执行的语义操作,如 -moveUp:。它们由修饰符标志更改,因此 Shift-up-arrow 可能会生成 -moveUpAndModifySelection:

无论如何,在 -textView:doCommandBySelector: 中,您可以根据选择器执行代码并告诉 TextView 不要做任何其他事情(通过返回 YES)或者让 TextView 另外执行其正常操作(通过返回 NO)。 (显然,对于您不关心的任何内容,返回 NO。)

关于macos - 快速识别用户是否在编辑 NSTextField 时按下了箭头键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29579092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com