在整个 window 中识别关键事件
recognizing key event in entire window
我正在开发一个音译应用程序,它从 NSTextView 获取一些文本并将其音译并放入另一个 NSTextView,
我想要做的是,当用户在输入单词并按下 space 时输入句子时,我希望 space 键触发一个动作,我指定将句子分成一个数组个人的话。
为了做到这一点,我尝试覆盖 viewController class:
中的 keyDown 函数
override func keyDown(theEvent: NSEvent) {
if (theEvent.keyCode == 49){
print("pressed space")
}
}
不起作用,当我子 class NSTextView class 并覆盖其中的 keyDown 函数但我的 textView 停止输入文本时它起作用。
如何为有效的 space 键设置按键事件?通过按 space?
将句子分成单词数组的任何其他建议
谢谢
第 1 步是将您的视图控制器设置为 NSTextField 的委托。如果你使用 nibs 或 storyboard,它将看起来像这样:
基本上是按住 ctrl 拖动来查看控制器并设置委托。
然后您可以对视图控制器中更改的文本做出反应:
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(" "))
}
}
}
它将打印出由 space:
分隔的单词数组
["a", ""]
["a", "boy", ""]
["a", "boy", "came", ""]
["a", "boy", "came", "to", ""]
["a", "boy", "came", "to", "school", ""]
您可能需要从数组中删除最后一项:
override func controlTextDidChange(obj: NSNotification) {
guard let textField = obj.object as? NSTextField else { return }
if textField.stringValue.characters.last == " " {
print(textField.stringValue.componentsSeparatedByString(" ").filter { [=11=] != "" })
}
}
NSTextView 的逻辑是相似的。按住 Ctrl 从文本视图拖动以将视图控制器设置为委托:
然后使用下面的代码:
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 { [=12=] != "" })
}
}
它将正常工作:
我正在开发一个音译应用程序,它从 NSTextView 获取一些文本并将其音译并放入另一个 NSTextView, 我想要做的是,当用户在输入单词并按下 space 时输入句子时,我希望 space 键触发一个动作,我指定将句子分成一个数组个人的话。 为了做到这一点,我尝试覆盖 viewController class:
中的 keyDown 函数override func keyDown(theEvent: NSEvent) {
if (theEvent.keyCode == 49){
print("pressed space")
}
}
不起作用,当我子 class NSTextView class 并覆盖其中的 keyDown 函数但我的 textView 停止输入文本时它起作用。 如何为有效的 space 键设置按键事件?通过按 space?
将句子分成单词数组的任何其他建议谢谢
第 1 步是将您的视图控制器设置为 NSTextField 的委托。如果你使用 nibs 或 storyboard,它将看起来像这样:
基本上是按住 ctrl 拖动来查看控制器并设置委托。
然后您可以对视图控制器中更改的文本做出反应:
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(" "))
}
}
}
它将打印出由 space:
分隔的单词数组["a", ""]
["a", "boy", ""]
["a", "boy", "came", ""]
["a", "boy", "came", "to", ""]
["a", "boy", "came", "to", "school", ""]
您可能需要从数组中删除最后一项:
override func controlTextDidChange(obj: NSNotification) {
guard let textField = obj.object as? NSTextField else { return }
if textField.stringValue.characters.last == " " {
print(textField.stringValue.componentsSeparatedByString(" ").filter { [=11=] != "" })
}
}
NSTextView 的逻辑是相似的。按住 Ctrl 从文本视图拖动以将视图控制器设置为委托:
然后使用下面的代码:
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 { [=12=] != "" })
}
}
它将正常工作: