2012-01-03 13 views
3

NSTextView類允許用戶使用上下文菜單(右鍵單擊)來解除/啓用諸如「鍵入時拼寫」之類的功能。但是當我在自己的應用中使用NSTextView時,這些首選項不會由文本視圖本身自動保存,這意味着我必須單獨保存它們 - 對嗎?如何處理NSTextView首選項(拼寫和語法,替換,...​​)

現在我還希望允許用戶在我的應用程序首選項中更改這些設置(如在TextEdit中)。我所做的是將文本視圖首選項保存爲用戶默認值,這意味着每次用戶更改應用首選項中的設置時,我都會應用這些設置並保存它們。除了用戶使用上下文菜單而不是通過應用首選項更改文本視圖設置的情況之外,這很容易實現。

我現在的問題是:如何改變NSTextView的設置,我可以保存嗎?

回答

2

我已經完成了一個項目,其中我已經劃分了NSTextView,並且可以輕鬆捕獲用戶所做的任何設置更改。

所以,你要做到這一點,只需創建一個新.h & .m文件並聲明它是這樣的:

(在.h文件)

@interface BrutellaTextView : NSTextView 

@end 

(在

.m文件)

@interface BrutellaTextView 

- (void)setContinuousSpellCheckingEnabled:(BOOL)flag 
{ 
    // here I am just setting user defaults... you may choose 
    // to have some other place to save the settings 
    NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; 
    if(userDefaults) 
    { 
     [userDefaults setBool: flag forKey: @"continuousSpellCheckingEnabled"]; 
    } 

    // and to get the functionality to actually happen, 
    // call the superclass 
    [super setContinuousSpellCheckingEnabled: flag]; 
} 

@end 

(和你可以覆蓋其他NSTextView方法以在其他設置更改時捕獲,例如setRulerVisible:)。

現在,當您處於XIB文件中時,請務必將您的文本視圖的CustomClass設置爲BrutellaTextView,您將全部設置!

沒有通知,你可以註冊,以獲取NSTextView設置更改,所以就我而言,這是最好的方式做你想要做的事。

我希望這個答案能幫助你!

+0

我已經實現了委託方法,但似乎每次文本視圖都需要強調單詞時調用該方法。因此,即使拼寫狀態沒有改變,該方法也經常被調用!它可能以這種方式工作,但我正在尋找更「正確」的方式! – brutella 2012-01-04 11:15:16

+0

好的...我已經改變了我的答案,希望能夠照顧好你的問題。子類化'NSTextView'是你的情況。這就是我在自己的應用程序中所做的。 – 2012-01-13 06:04:05

+0

是的,這似乎很好。 – brutella 2012-01-13 21:46:11

0

您也可以使用NSTextViews方法 toggleAutomaticSpellingCorrection:

此方法僅調用,當用戶通過菜單/文本菜單更改設置,而不是如果程序員編程改變設置(例如插入文本時臨時禁用) 。