Как обрабатывать настройки NSTextView (правописание и грамматика, подстановки, ...) - PullRequest
4 голосов
/ 04 января 2012

Класс NSTextView позволяет пользователю отключать / включать функции, такие как «правописание при наборе текста», с помощью контекстного меню (щелчок правой кнопкой мыши). Но когда я использую NSTextView в своем собственном приложении, эти настройки не сохраняются автоматически самим текстовым представлением, что означает, что я должен сохранять их отдельно - верно?

Теперь я также хочу разрешить пользователю изменять эти настройки в настройках моего приложения (как в TextEdit). Что я делаю, это сохраняю настройки просмотра текста в настройках пользователя по умолчанию, что означает, что каждый раз, когда пользователь меняет настройку в настройках приложения, я применяю эти настройки и сохраняю их. Это довольно легко сделать, за исключением одного случая, когда пользователь изменяет настройку представления текста с помощью контекстного меню, а не с помощью настроек приложения.

Мой вопрос сейчас: Как я могу получать уведомления при изменении настроек NSTextView, чтобы я мог их сохранить?

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Я выполнил проект, в котором у меня есть подкласс 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 голосов
/ 05 июля 2017

Вы также можете использовать метод NSTextViews toggleAutomaticSpellingCorrection:

Этот метод вызывается только тогда, когда пользователь изменяет настройку через menu / contextMenu, а не если программист меняет настройку программно (например, временно отключает при вставке текста).

...