我有一个 NSTextField,我想启用“as-you-type”拼写检查。当我加载我的应用程序时,我可以从菜单栏 > 编辑 > 拼写和语法 > 键入时检查拼写。
我希望默认启用此选项。在 IB 中,我可以为 NSTextView 启用此功能,但我想将 NSTextField 用于 UI 的这一部分。
谢谢你。
更新: 有谁知道是否可以在 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]];
是否不能直接调用菜单项操作而不是使用 setEnabled:YES ?
以上输出如下,不知道为什么target为null
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];