macOS禁用NSTextView的引號替換

問題描述

在NSTextView中輸入json的雙引號時,輸入法爲英文,但顯示的是中文的引號。而且在輸入過程中能感覺到英文引號替換成中文引號。再試了下單引號也存在該問題,而!,@,#等字符不存在該問題。

猜測:是系統對引號做了特殊處理,在輸入引號的時候將輸入法更改爲中文輸入法嗎?

嘗試1:實在是不知從何入手,查看了下NSTextView中的API,嘗試了下重寫-insertText,識別到輸入中文引號,就重寫成insertText:@”\”“,但是其實在輸入英文引號的時候,insertText識別的也是英文的引號。所以這種思路其實是不可行的,是在顯示時(insertText後)則切換成中文引號了。

嘗試2: 在storyboard中,NSTextView屬性smart Quotes,智能引號默認是開啓的,嘗試了下禁用,但仍然沒有解決(其實就是這個原因,但這裏是因爲xcode的bug,導致屬性失效)。


直引號與彎引號

彎引號:「typographic, or curly quotation marks」
直引號:「neutral, vertical, straight, typewriter, or dumb quotation marks」,又叫dumb quotes傻瓜引號

直引號本是打字機時代爲了儘量節約鍵盤空間而製作出來的。

現代的鍵盤和 ASCII 字符集都繼承了這個傳統——ASCII 中只有一個單直引號(U+0027 ’ apostrophe)和一個雙直引號(U+0022 ” quotation mark)。

一些文字處理軟件(如 Word),能自動將直引號轉換爲彎引號。
許多編輯環境下(包括 OS X 的默認系統設置)會根據上下文將直引號轉換爲彎引號。
中文輸入法也是普遍使用彎引號(主要其實是因爲簡中彎引號佔一字寬並偏向內側,和比例寬度的直引號差別過大)。

解決方案

這個解決方案在Stack Overflow上已經有了


將automaticQuoteSubstitutionEnabled設爲NO,即可禁用引號的智能替換功能。
Storyboard中NSTextView的smart Quotes屬性對應的應該就是這一屬性,照理禁用後應該是不會智能替換,懷疑是Xcode的Bug

當然也可通過enabledTextCheckingTypes將所有自動轉換類型禁用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章