Luk*_*uke 9 macos cocoa spell-checking objective-c nstextfield
我有一个NSTextField,我想启用"as-you-type"拼写检查.当我加载我的应用程序时,我可以从菜单栏>编辑>拼写和语法>键入时检查拼写.
我希望默认情况下启用此选项.在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]];
Run Code Online (Sandbox Code Playgroud)
是不是可以直接调用菜单项操作而不是使用setEnabled:YES?
以上输出如下,不确定目标为空的原因
App[3895:a0f] Menu: <NSMenuItem: 0x100135180 Check Spelling While Typing>
Current language: auto; currently objective-c
App[3895:a0f] Target: (null)
Run Code Online (Sandbox Code Playgroud)
解
如果其他人需要知道,以下是此问题的解决方案.一些NSLogging告诉我,在将NSTextField设置为firstResponder之后,firstResponder实际上包含NSTextView,然后您可以启用拼写.我假设NSTextField在子视图中包含一个NSTextView,它接收响应者,实际上这应该在NSTextField类中公开.
// Focus TextField
[textField becomeFirstResponder];
// Enable Continous Spelling
NSTextView *textView = (NSTextView *)[self.window firstResponder];
[textView setContinuousSpellCheckingEnabled:YES];
Run Code Online (Sandbox Code Playgroud)
你很幸运,苹果提供了一个拼写检查器类:NSSpellChecker:
使用此功能,您可以在每次用户使用 textdidChange 委托方法更新文本时检查拼写。
您还说您想使用 NSTextField 而不是 NSTextView。为什么不直接使用可编辑的 NSTextView 来设置切换自动拼写校正属性呢?
编辑:
要以编程方式更改菜单项的值,请执行以下操作:
// 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]];
Run Code Online (Sandbox Code Playgroud)
编辑:
看来上面的方法实际上并没有像预期的那样触发该方法,并且目标为 NULL(因为尚未设置第一响应者?)。但是可以直接发送消息,如下所示:
// Focus TextField
[textField becomeFirstResponder];
// Enable Continous Spelling
NSTextView *textView = (NSTextView *)[self.window firstResponder];
[textView setContinuousSpellCheckingEnabled:YES];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4500 次 |
| 最近记录: |