2016-11-09 33 views
0

我從NSTextView,其中,在初始化時,設置了自動拼寫與setContinuousSpellCheckingEnabled(true)和聚焦時,本身設置爲第一響應者檢查繼承的類。根據迄今爲止所見到的所有問題和答案,似乎這應該足以確保拼寫檢查程序正常工作。NSTextView自動拼寫檢查工作不正常

但是當我鍵入胡言亂語到視圖,除非這個詞比較快打字也不會強調任何拼寫錯誤的單詞。也就是說,當我在大約半秒的時間內輸入「asdf」後面的空格時,拼寫檢查程序會正確地強調它。但是,如果我輸入「asdf」的速度更慢,或者即使我快速輸入「asdf」,但在添加空格之前等待一秒鐘,也不會在該單詞上顯示下劃線。

這導致了同一字的可能性鍵入具有衝突的拼寫評價多次,如下所示。

在測試過程中,甚至有一個時間,我看到了一個紅色下劃線出現的一瞬間,然後立即從拼寫錯誤的單詞我輸入了消失。

另外值得注意的是,如果焦點離開和重點後重新進入文本視圖,約1秒後所有的波浪下劃線出現在所有的拼寫錯誤的單詞的正確地點。然而,繼續輸入附加文本仍然會引起我上面提到的問題。

這意味着,拼寫錯誤的單詞不會被強調,除非

  1. 他們是不合理的快速輸入

  2. 他們一直聚焦視圖

之前鍵入文本視圖

正如我之前說過的,我已經看過所有相關的SO線程,並且我也玩過makeFirstResponder()和廣泛的,我剛剛用完想法。

快速更新,自上週以來,我已經嘗試了一些事情,其中​​一個顯示的諾言。使用TextView函數setSpellingState,我能夠以編程方式強制紅色波浪下劃線出現在我請求的TextView中的任何位置。雖然這看起來很有希望,但是使用這個函數卻發現了另一個錯誤行爲:當我調用這個函數並在視圖的某處出現紅色波浪曲線時,這條波浪線只會短暫出現。出現扭曲的紅色下劃線,經過與我在「asdf」錯誤中看到的大致相同的延遲後,波浪線消失。這導致我認爲這個問題可能是由覆蓋一些Cocoa API的C#代碼引起的。

這是一個OSX問題?爲什麼像我輸入拼寫檢查程序是否會正確劃分單詞的決定性因素的速度那樣隨心所欲?

P.S.該代碼的語法與Objective-C語法不同,因爲我使用的是MCocoa,它是一種爲Cocoa API提供機器生成包裝的工具。我目前用來引用NSTextView的C#代碼是從MacOSX 10.5 SDK生成的

回答

0

當使用setSpellingState時,由於setSpellingState和自動拼寫檢查器之間的競爭條件,波形線有時會出現並立即消失。看起來好像他們倆都試圖在同一時間突出一個詞,他們會相互抵消。由於自動拼寫檢查器的行爲首先是導致整個問題的原因,因此我將替換爲setContinuousSpellCheckingEnabled(false),以防止自動拼寫檢查器干擾我自己的實現。現在紅色的下劃線下劃線顯示正確,無論我如何輸入單詞!只要它是拼寫錯誤當然:)的

另外,具有NSTextView的自動拼寫檢查問題的人,我可以簡單地禁止使用setContinuousSpellCheckingEnabled(false)自動拼寫檢查器,並使用NSSpellChecker.shared()在我自己的自動拼寫檢查黑客來檢查拼寫錯誤字和setSpellingState強制繪製由NSSpellChecker創建的拼寫錯誤的單詞下的紅色波形拼寫指示符。所有這些都在textViewDidChangeSelection的執行過程中完成,因此每次通過鍵入,從不完整的單詞移動光標或粘貼文本來更改選擇時都可以檢查單詞。