我在我的應用程序中有一個keyDown
函數,用於捕獲名爲textInput
的NSTextView
的輸入。有些轉換是通過將NSAttributedString
追加到NSTextView
中的輸入完成的。keyDown不立即更新NSTextView
目前工作正常,但我的問題是輸入到keyDown
的文本框中的值不會被添加到textInput.textStorage?.string
,直到按下另一個鍵。
例如,如果我輸入文字abcde
而已進入textInput
,然後裏面func keyDown()
我嘗試訪問textInput.textStorage?.string
,它將返回abcd
。
這裏是沒有多餘部分的功能:
override func keyDown(with event: NSEvent) {
let bottomBox = textInput.textStorage?.string // This returns one character short of what is actually in the text box
if let bottomBox = bottomBox {
var attribute = NSMutableAttributedString(string: bottomBox)
// Do some stuff here with bottomBox and attribute
// Clear and set attributed string
textInput.textStorage?.mutableString.setString("")
textInput.textStorage?.append(attribute)
}
}
如果我使用keyUp
,這不是一個問題,雖然與keyUp
的問題是,如果用戶按住鍵,屬性在NSAttributedString
上不要設置,直到用戶釋放密鑰。
雖然也許有一種方法可以在keyDown
函數中以編程方式釋放keyDown事件,或者生成keyUp事件,但似乎無法找到任何東西。
有沒有辦法解決這個問題?
「我的應用程序中有一個keyDown函數」究竟在哪裏? –
在監視keyDown事件的視圖控制器中 –
不要使用NSEvent。使用通知。 –