Pregunta

Tengo una NSTextField que me gustaría para que "como-usted-tipo" la corrección ortográfica. Cuando cargo mi aplicación que pueda hacer esto desde el menú de la barra> Edición> Ortografía y gramática> Comprobar ortografía al escribir.

Me gustaría que esta opción de ser activado por defecto. Dentro del IB puedo permitir esto para un NSTextView pero me gustaría utilizar NSTextField para esta parte de la interfaz de usuario.

Gracias.

Actualización: ¿Alguien sabe si es posible ejecutar mediante programación la Barra de Menú> Editar> Ortografía y gramática> Comprobar ortografía al pulsar en la opción de la NSTextField a partir del código de Objective-C? Parece que el NSTextField apoya el "Comprobar ortografía al escribir" opción, simplemente no hay manera de activar la opción de Obj-C.

Editar # 1

He intentado lo siguiente para activar manualmente el menú y no funcionó:

// 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]];

No es posible llamar directamente a la acción elemento de menú en lugar de utilizar el setEnabled: SI

Las salidas superiores a la siguiente, sin saber por qué la meta es nulo

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

SOLUCIÓN

A continuación se muestra la solución para este problema si alguien necesita más lo sepa. Algunos NSLogging me mostró que después de ajustar el NSTextField a firstResponder la firstResponder en realidad contiene un NSTextView, a continuación, puede permitir a la ortografía. Asumo la NSTextField contiene una NSTextView en los subvistas que toma la respuesta, realmente esto se debe exponer en la clase NSTextField.

// Focus TextField
[textField becomeFirstResponder];

// Enable Continous Spelling
NSTextView *textView = (NSTextView *)[self.window firstResponder];
[textView setContinuousSpellCheckingEnabled:YES];
¿Fue útil?

Solución

Estás de suerte, Apple proporciona una clase corrector ortográfico: NSSpellChecker:

http://developer.apple .com / mac / biblioteca / documentación / cacao / conceptual / SpellCheck / Conceptos / SpellChecker.html

El uso de este se puede comprobar el la ortografía cada vez que el usuario actualiza el texto utilizando el método textdidChange delegado.

También se dice que desea utilizar en lugar de NSTextField NSTextView. ¿Por qué no sólo tiene que utilizar un NSTextView editable donde se puede establecer la propiedad toggleAutomaticSpellingCorrection?

EDIT:

Para cambiar el valor del elemento de menú mediante programación hacer algo en la línea de:

// 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:

Parece que el método anterior en realidad no disparar el método, ya que se supone que es y el objetivo es NULL (debido a que el primer nivel de respuesta no se ha fijado?). Sin embargo, es posible enviar el mensaje directamente, así:

// Focus TextField
[textField becomeFirstResponder];

// Enable Continous Spelling
NSTextView *textView = (NSTextView *)[self.window firstResponder];
[textView setContinuousSpellCheckingEnabled:YES];

Otros consejos

¿Usted ha intentado aprovechar el textDidChange método delegado NSTextField: y llamando a:

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

cada vez?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top