如何处理 NSTextView 首选项(拼写和语法、替换等)

bru*_*lla 5 cocoa nstextview osx-lion

NSTextView类允许用户以解散/启用的功能,如“拼写,而输入”通过上下文菜单(右键单击)。但是当我NSTextView在自己的应用程序中使用 a 时,文本视图本身不会自动保存这些首选项,这意味着我必须单独保存它们 - 对吗?

现在我还希望允许用户在我的应用程序首选项中更改这些设置(如在 TextEdit 中)。我所做的是将文本视图首选项保存在用户默认值中,这意味着每次用户更改应用首选项中的设置时,我都会应用这些设置并保存它们。除了用户使用上下文菜单而不是通过应用程序首选项更改文本视图设置的一种情况外,实现这一点非常容易。

我现在的问题是:如何在 a 的设置NSTextView更改时收到通知,以便我可以保存它们?

Mic*_*ann 2

我完成了一个项目,其中我对 NSTextView 进行了子类化,并且我可以轻松捕获用户所做的任何设置更改。

因此,要执行此操作,只需创建一个新的.h&.m文件并按如下方式声明:

(在 .h 文件中)

@interface BrutellaTextView : NSTextView

@end
Run Code Online (Sandbox Code Playgroud)

(在 .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
Run Code Online (Sandbox Code Playgroud)

(并且您可以覆盖其他NSTextView方法以在其他设置更改时进行捕获,例如setRulerVisible:)。

现在,当您在 XIB 文件中时,请确保将文本视图的 CustomClass 设置为 ,BrutellaTextView然后一切就完成了!

没有任何通知可以让您注册以获取 NSTextView 设置更改,因此就我而言,这是执行您想要执行的操作的 最佳方法。

希望这个回答对您有所帮助!