Objective c 如何在Mac OS X上的NSTextField中启用拼写检查?

Objective c 如何在Mac OS X上的NSTextField中启用拼写检查?,objective-c,cocoa,macos,spell-checking,nstextfield,Objective C,Cocoa,Macos,Spell Checking,Nstextfield,我有一个NSTextField,我想启用“键入时”拼写检查。当我加载我的应用程序时,我可以从菜单栏>编辑>拼写和语法>打字时检查拼写 我希望默认情况下启用此选项。在IB中,我可以为NSTextView启用此功能,但我希望对UI的这部分使用NSTextField 多谢各位 更新:是否有人知道是否可以通过编程从Objective-C代码在NSTextField上键入选项时运行菜单栏>编辑>拼写和语法>检查拼写?NSTextField似乎支持“键入时检查拼写”选项,只是无法从Obj-C启用该选项 编辑

我有一个NSTextField,我想启用“键入时”拼写检查。当我加载我的应用程序时,我可以从菜单栏>编辑>拼写和语法>打字时检查拼写

我希望默认情况下启用此选项。在IB中,我可以为NSTextView启用此功能,但我希望对UI的这部分使用NSTextField

多谢各位

更新:是否有人知道是否可以通过编程从Objective-C代码在NSTextField上键入选项时运行菜单栏>编辑>拼写和语法>检查拼写?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]];
是否不能直接调用菜单项action而不是使用setEnabled:YES

上述输出如下,不确定目标为何为空

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

您是否尝试过点击NSTextField委托方法textDidChange: 并致电:

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

每次?

如果你运气好,苹果都会提供一个拼写检查器类:NSSpellChecker:

使用此方法,您可以在用户每次使用textdidChange委托方法更新文本时检查拼写

您还说要使用NSTextField而不是NSTextView。为什么不使用可编辑的NSTextView,在其中可以设置TogleAutomaticSpellingCorrection属性

编辑:

要以编程方式更改菜单项的值,请执行以下操作:

// 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]];
编辑:

似乎上面的方法实际上并没有像预期的那样触发该方法,并且目标为空(因为还没有设置第一响应者?)。但是,可以直接发送消息,如下所示:

// Focus TextField
[textField becomeFirstResponder];

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

我指的是NSTextField,不是UITextField。这是一个Mac OS X桌面问题。我希望有比使用textDidChange更好的东西。我注意到默认菜单栏连接到编辑>拼写和语法>键入时检查拼写选项上的TogleAutomaticSpillingCorrection:。应用程序运行后,此菜单选项将与NSTextField一起使用。我想知道如何启用Obj-C代码中的官方选项。您可能希望从您的答案中删除错误的iPhone建议,这样它就不会出现在Google中。这似乎并不表明我如何可以像从“编辑”菜单中一样启用“键入时”拼写检查。我是不是遗漏了什么?恩,NSTextView不支持焦点环属性,我不想在这种情况下重新发明它。我真的不明白为什么在使用NSTEXT字段时,我不能以编程方式打开“编辑”>“拼写和语法”菜单中可以访问的拼写选项。是否应该通过Obj-C代码打开该选项?此外,NSTextField可以轻松处理返回事件的操作。编辑MainMenu.xib直接设置该选项如何?请参阅editYes,我尝试过,在应用程序加载之前和加载时,菜单选项将被禁用,无论它是在IB中设置的。难道我不能使用代码运行该菜单项吗?我对Objective-C非常陌生,所以我不知道从哪里开始。出现的
NSTextView
称为字段编辑器。如果此
firstResponder
强制转换太脆弱,您可以覆盖
-windowWillReturnFieldEditor:forObject:
中的
NSWindowController
并更改其中的设置。
// Focus TextField
[textField becomeFirstResponder];

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