2016-08-15 62 views
0

我正在研究一個音譯應用程序,它從NSTextView中獲取一些文本並將其轉換爲另一個NSTextView, 我想要做的是,因爲用戶在他輸入句子時鍵入一個單詞並按下空格我希望空格鍵觸發一個動作,我指定將該句子分解爲單個單詞的數組。 爲了做到這一點我已經嘗試重寫該keydown功能中的viewController類:在整個窗口中識別關鍵事件

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

不工作,當我繼承NSTextView類,並在它覆蓋的keyDown功能,但我的TextView停止輸入查詢的文字作品。 我如何設置空間鍵的關鍵事件?任何其他建議通過按空格將句子分解爲單詞數組?

感謝

+0

你嘗試搜索?這可能會幫助你。 http://stackoverflow.com/questions/32446978/swift-capture-keydown-from-nsviewcontroller – Khundragpan

回答

0

第一步是設置視圖控制器是的NSTextField的委託。如果您使用筆尖或故事情節會是這樣的:

enter image description here

基本上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(" ")) 
    } 

} 
} 

它將打印出其中由空格隔開字的陣列:

然後,可以對文本反應在視圖控制器改變

[「一」,「」]

[ 「一」, 「男孩」, 「」]

[ 「一」, 「男孩」, 「來了」, 「」]

[ 「一」, 「男孩」, 「來了」, 「對」, 「」]

[ 「一」, 「男孩」, 「來了」, 「對」, 「學校」, 「」]

您可能需要最後一個項目從數組中刪除:

 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拖動設置視圖控制器爲委託: 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

+0

嗨,謝謝,你的方法完美的文本字段,但因爲我的文本很長我使用NSTextView,它不會繼承NSControl.how可以在NSTextView中調用controlTextDidChange函數嗎? – omgtheykilledkenny

+0

我更新了NSTextView的答案 –

+0

確實有效,謝謝;) – omgtheykilledkenny