Как я позволяю проверить правописание в NSTextField на Mac OS X?

У меня есть NSTextField, что я хотел бы включить проверку правописания "as-you-type". Когда я загружаю свое приложение, я могу сделать это от Строки меню> Редактирование> Написание и Грамматика> Проверка орфографии При Вводе.

Я хотел бы, чтобы эта опция была включена по умолчанию. В IB я могу включить это для NSTextView, но я хотел бы использовать NSTextField для этой части UI.

Спасибо.

Обновление: кто-либо знает, возможно ли программно выполнить опцию Menu Bar> Edit> Spelling и Grammar> Check Spelling While Typing на NSTextField из кода Objective C? Кажется, что NSTextField поддерживает опцию "Check Spelling While Typing", просто нет никакого способа включить опцию из Obj-C.

Редактирование № 1

Я попробовал следующее для ручного включения меню, и оно не работало:

// Focus TextField
[textField becomeFirstResponder];

// Enable Spell Checking
NSMenu *mainMenu = [[NSApplication sharedApplication] mainMenu];
NSMenu *editMenu = [[mainMenu itemWithTitle:@"Edit"] submenu];
NSMenu *spellingMenu = [[editMenu itemWithTitle:@"Spelling and Grammar"] submenu];
NSMenuItem *autoSpellingMenuItem = [spellingMenu itemWithTitle:@"Check Spelling While Typing"];
[autoSpellingMenuItem setEnabled:YES];

NSLog(@"Menu: %@", [autoSpellingMenuItem description]);
NSLog(@"Target: %@", [[autoSpellingMenuItem target] description]);

// Actually perform menu action
[[autoSpellingMenuItem target] performSelector:[autoSpellingMenuItem action]];

Разве не возможно непосредственно назвать действие пункта меню вместо того, чтобы использовать setEnabled:YES?

Вышеупомянутые выводы следующее, не уверенное, почему цель является пустой

App[3895:a0f] Menu: <NSMenuItem: 0x100135180 Check Spelling While Typing>
Current language:  auto; currently objective-c
App[3895:a0f] Target: (null)

РЕШЕНИЕ

Ниже решение для этой проблемы, если кто-либо еще должен знать. Некоторый NSLogging показал мне, что после установки NSTextField к firstResponder firstResponder на самом деле содержит NSTextView, можно затем включить написание. Я предполагаю, что NSTextField содержит NSTextView в подпредставлениях, который берет респондента, действительно это должно быть выставлено в классе NSTextField.

// Focus TextField
[textField becomeFirstResponder];

// Enable Continous Spelling
NSTextView *textView = (NSTextView *)[self.window firstResponder];
[textView setContinuousSpellCheckingEnabled:YES];
9
задан Luke 13 May 2010 в 04:21
поделиться

2 ответа

Вам повезло, Apple предоставляет класс проверки орфографии: NSSpellChecker:

http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/SpellCheck/Concepts/SpellChecker.html

Используя его, вы можете проверять орфографию каждый раз, когда пользователь обновляет текст, используя метод делегата textdidChange.

Также вы говорите, что хотите использовать NSTextField, а не NSTextView. Почему бы просто не использовать редактируемый NSTextView, в котором можно установить свойство toggleAutomaticSpellingCorrection?

EDIT:

Чтобы программно изменить значение пункта меню, сделайте что-то вроде:

// Enable Spell Checking
NSMenu *mainMenu = [[NSApplication sharedApplication] mainMenu];
NSMenu *editMenu = [[mainMenu itemWithTitle:@"Edit"] submenu];
NSMenu *spellingMenu = [[editMenu itemWithTitle:@"Spelling and Grammar"] submenu];
NSMenuItem *autoSpellingMenuItem = [spellingMenu itemWithTitle:@"Check Spelling While Typing"];
[autoSpellingMenuItem setEnabled:YES];

// Actually perform menu action
[[autoSpellingMenuItem target] performSelector:[autoSpellingMenuItem action]];

EDIT:

Похоже, что вышеприведенный метод на самом деле не запускает метод, как он должен, и целью является NULL (потому что первый ответчик не был установлен?). Однако можно отправить сообщение напрямую, например, так:

// Focus TextField
[textField becomeFirstResponder];

// Enable Continous Spelling
NSTextView *textView = (NSTextView *)[self.window firstResponder];
[textView setContinuousSpellCheckingEnabled:YES];
4
ответ дан 3 November 2019 в 07:12
поделиться

Вы пробовали подключаться к методу делегата NSTextField textDidChange: и каждый раз вызывать:

range = [[NSSpellChecker sharedSpellChecker] checkSpellingOfString:aString startingAt:0];

?

{{1} }
1
ответ дан 3 November 2019 в 07:12
поделиться