2009-12-07 54 views
2

我正在嘗試構建一個NSTextView,它可以在用戶鍵入時自動將其轉換爲美麗的RTF樣式文本的「標記」輸入。如何實現執行RTF轉換的即時標記的NSTextView

這個想法是讓用戶以「純文本」格式輸入文本,而是在現場「美化」它,

H1 A quick list: 
* first item 
* second item 

將被翻譯成帶有標題字體的第一行,然後是帶項目符號的列表。

我發現了很多潛在的方法,但文本系統非常複雜(有理由),如果已經有內置的東西,我不想開始「自己做飯」。順便說一句,我會很高興與Snow Leopard only API。

我首先想到的是「數據檢測器」,但我找不到這樣做的公共API。

已經到達了路的盡頭,我轉向新的「文本輸入源API」。這可以做各種各樣的事情,但WWDC 2006演示文稿「掌握文本輸入」的「數據驅動的輸入方法」部分在我的上下文中似乎很有趣。除了單張幻燈片之外,任何地方都不存在任何東西,所以它又是一個死路一條。

最後,我看看NSSpellChecker類,它也應該提供完成功能和自動更正..但我不知道這可以如何重新用於我的要求。

此刻,我很想只是手動重新解析整個NSTextStorage並進行更改自己當用戶停止打字..但我敢肯定有解決這個論壇聰明頭..

任何意見或指針在正確的方向將不勝感激。

回答

3

數據檢測器和拼寫檢查器都不適用於此任務。假設你只是在尋找一種方法將輸入傳遞給你已經擁有的解析器/格式器,那麼與文本系統的接口並不難。您正處在正確的軌道上,處理對NSTextStorage的編輯。

沿着這些路線,當用戶停下來時,不需要重新解析整個事物。文本系統向您發送修改後的範圍,並讓您有機會根據這些更改進行操作(甚至可以拒絕這些更改)。由於所有的改變都是通過這種方式來進行的(打字,粘貼,放下......),這就是你想要介入的地方。

因爲你正在處理標題和項目符號列表,我會得到修改範圍的段落。這給你一個很好的圓形工作單元,很容易發現,完全適合你要完成的工作。

祝你好運!

+0

謝謝。我一直在玩NSTextDelegate,它有效,但目前相當緩慢,因爲我現在使用textDidChange:通知,並且我每次都重新解析整個事物。 – 2009-12-07 17:04:10

+0

不解析整個事物每次用戶類型肯定有助於提高性能。 :-)鍵入中最輕微的停頓可以/通常會觸發-textDidChange:所以你希望你的解析/樣式代碼能夠儘可能高效地執行,儘可能地管理。 – 2009-12-07 20:26:17