gpt4 book ai didi

swift - 识别整个窗口中的关键事件

转载 作者:行者123 更新时间:2023-11-30 13:08:59 26 4
gpt4 key购买 nike

我正在开发一个音译应用程序,它从 NSTextView 获取一些文本并对其进行音译并将其放入另一个 NSTextView 中,我想要做的是,当用户在输入单词并按下空格时输入句子时,我希望空格键触发一个 Action ,我指定该 Action 将句子分解为单个单词的数组。为了做到这一点,我尝试覆盖 viewController 类中的 keyDown 函数:

override func keyDown(theEvent: NSEvent) {
if (theEvent.keyCode == 49){
print("pressed space")
}
}

这不起作用,当我子类化 NSTextView 类并覆盖其中的 keyDown 函数但我的 textView 停止输入文本时,它起作用。如何为有效的空格键设置按键事件?对于通过按空格将句子分成单词数组还有其他建议吗?

谢谢

最佳答案

第 1 步是将 View Controller 设置为 NSTextField 的委托(delegate)。如果您使用 Nib 或 Storyboard,它将如下所示:

enter image description here

基本上按住 Ctrl 键拖动即可查看 Controller 并设置委托(delegate)。

然后您可以对 View Controller 中更改的文本使用react:

import Cocoa

class ViewController: NSViewController {


override func controlTextDidChange(obj: NSNotification) {

guard let textField = obj.object as? NSTextField else { return }

if textField.stringValue.characters.last == " " {
print(textField.stringValue.componentsSeparatedByString(" "))
}

}
}

它将打印出由空格分隔的单词数组:

[“a”,“”]

[“一个”,“男孩”,“”]

[“一个”,“男孩”,“来了”,“”]

[“一个”,“男孩”,“来”,“到”,“”]

[“一个”,“男孩”,“来”,“到”,“学校”,“”]

您可能需要从数组中删除最后一项:

     override func controlTextDidChange(obj: NSNotification) {

guard let textField = obj.object as? NSTextField else { return }

if textField.stringValue.characters.last == " " {
print(textField.stringValue.componentsSeparatedByString(" ").filter { $0 != "" })
}

}

对于 NSTextView 来说,逻辑是类似的。按住 Ctrl 键从 TextView 中拖动以将 View Controller 设置为委托(delegate): enter image description here

然后使用以下代码:

  func textDidChange(obj: NSNotification) {

guard let textView = obj.object as? NSTextView else { return }
guard let stringValue = textView.textContainer?.textView?.string else { return }

if stringValue.characters.last == " " {
print(stringValue.componentsSeparatedByString(" ").filter { $0 != "" })
}

}

它会正常工作:

enter image description here

关于swift - 识别整个窗口中的关键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38960542/

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