2010-05-13 10 views
9

Mam NSTextField, który chciałbym włączyć sprawdzanie pisowni "jak-ty". Po załadowaniu aplikacji mogę to zrobić z paska menu> Edycja> Pisownia i gramatyka> Sprawdzanie pisowni podczas pisania.Jak włączyć sprawdzanie pisowni w NSTextField na Mac OS X?

Chciałbym, aby ta opcja była domyślnie włączona. Wewnątrz IB mogę włączyć to dla NSTextView, ale chciałbym użyć NSTextField dla tej części interfejsu.

Dziękuję.

Aktualizacja: Czy ktoś wie, czy jest możliwe aby programowo uruchomić z paska menu> Edytuj> Pisownia i gramatyka> Sprawdzanie pisowni podczas opcję na NSTextField z kodem Objective-C? Wygląda na to, że NSTextField obsługuje opcję "Sprawdź pisownię podczas pisania", ale nie ma możliwości włączenia opcji z Obj-C.

Edit # 1

Próbowałem następujących ręcznie włączyć menu i to nie działa:

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

Czy nie jest możliwe, aby bezpośrednio wywołać działanie elementu menu zamiast używać setEnabled: TAK?

Powyższe wyjścia następujące, nie wiem, dlaczego celem jest null

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

ROZWIĄZANIE

Poniżej znajduje się rozwiązanie tego problemu, jeśli ktoś musi wiedzieć. Niektóre NSLogging pokazał mi, że po ustawieniu NSTextField na firstResponder pierwszyResponder faktycznie zawiera NSTextView, możesz następnie włączyć pisownię. Zakładam, że NSTextField zawiera NSTextView w subviews, które pobiera responder, naprawdę to powinno być ujawnione w klasie NSTextField.

// Focus TextField 
[textField becomeFirstResponder]; 

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

Wyświetlany "NSTextView" nazywa się edytorem pól. Jeśli ten rzutowanie 'firstResponder' jest zbyt delikatne, możesz przesłonić' -windowWillReturnFieldEditor: forObject: 'w' NSWindowController' i zmienić tam ustawienia. – ctietze

Odpowiedz

4

Masz szczęście, Apple zapewnia klasę pisowni: NSSpellChecker:

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

Stosując tę ​​można sprawdzić pisownię każdym razem, gdy użytkownik aktualizuje tekstu przy użyciu metody delegata textdidChange.

Mówisz też, że chcesz używać NSTextField zamiast NSTextView. Dlaczego po prostu nie użyć edytowalnego NSTextView, w którym można ustawić właściwość toggleAutomaticSpellingCorrection?

EDIT:

Aby zmienić wartość elementu menu programowo zrobić coś wzdłuż linii:

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

Wydaje się, że powyższa metoda nie faktycznie wystrzelić metoda tak jak powinna, a cel ma wartość NULL (ponieważ pierwsza odpowiedź nie została ustawiona?). Możliwe jest jednak wysłanie wiadomości bezpośrednio, tak jak:

// Focus TextField 
[textField becomeFirstResponder]; 

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

To nie wydaje się wskazywać, w jaki sposób mogę włączyć sprawdzanie pisowni "jak ci", tak jak ja, z menu Edycja. Czy czegoś tu brakuje? – Luke

+0

Zobacz zaktualizowaną odpowiedź – pheelicks

+0

Cóż, NSTextView nie obsługuje właściwości pierścienia ostrości, której nie chciałem ponownie wymyślać w tej sytuacji. Naprawdę nie rozumiem, dlaczego nie mogę programowo zmienić opcji sprawdzania pisowni, do których mam dostęp w menu Edycja> Pisownia i gramatyka podczas korzystania z NSTextField. Czy nie powinien istnieć jakiś sposób, aby włączyć tę opcję za pomocą kodu Obj-C? – Luke

1

Czy próbowali stukając w NSTextField metoda delegat textDidChange: i powołania:

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

każdym czasie?

+0

Mam na myśli NSTextField, a nie UITextField. To jest pytanie na komputer Mac OS X. – Luke

+0

Miałem nadzieję, że było coś lepszego niż użycie textDidChange. Zauważyłem, że domyślny pasek menu jest podłączony do toggleAutomaticSpellingCorrection: w menu Edycja> Pisownia i gramatyka> Sprawdź pisownię podczas pisania. Ta opcja menu działa z NSTextField po uruchomieniu aplikacji. Chciałbym wiedzieć, jak włączyć tę oficjalną opcję, myśląc o kodzie Obj-C. – Luke

+0

Możesz chcieć usunąć z Twojej odpowiedzi niewłaściwą sugestię dla iPhone'a, aby nie pojawiała się ona w Google. – Luke