У меня есть NSTextField, для которого я хотел бы включить проверку орфографии «по мере ввода». Когда я загружаю свое приложение, я могу сделать это из строки меню > «Правка» > «Правописание и грамматика» > «Проверить правописание при вводе».
Я бы хотел, чтобы эта опция была включена по умолчанию. В IB я могу включить это для NSTextView, но я хотел бы использовать NSTextField для этой части пользовательского интерфейса.
Спасибо.
Обновление: Кто-нибудь знает, можно ли программно запустить строку меню > Изменить > Орфография и грамматика > Проверить орфографию при вводе в NSTextField из кода Objective-C? Кажется, что NSTextField поддерживает опцию «Проверять орфографию при вводе», просто нет возможности включить эту опцию из 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];
NSTextView
называется редактором полей. Если эта отливкаfirstResponder
слишком хрупкая, вы можете переопределить-windowWillReturnFieldEditor:forObject:
вNSWindowController
и изменить настройки там. - person ctietze   schedule 13.06.2017