在某些应用程序中,例如邮件客户端或Twitter客户端,我发现自己输入某些内容,一切看起来都很好,当我按下发送/推文按钮时,文本视图会自动将最后一个单词更正为拼写错误。很明显,在那之后我在完成打字之前等待了错误的时间,然后发送它,所以拼写检查仍然在继续。
我想这里的第一个问题应该是你对删除该功能的想法是什么?因为另一方面,我确信人们会发生完全相同的事情,但它实际上修复了最后一个字的拼写,而不是弄乱它。否则,如果您认为这是一个有效的想法是否有办法在NSTextView
失去焦点时禁用自动拼写纠正?
This question如何处理NSTextView
中的拼写内容
This question一起关闭拼写检查。
NSSpellChecker
特别是它的自动拼写纠正方法(我真的认为这会让我在某处)我想知道为什么NSSpellCheckerDelegate
不存在
This question关于NSSpellChecker
's误导(阅读评论)NSNotification
s
NSTextCheckingTypes
(位于底部)专门NSTextCheckingTypeCorrection
This question关于进行一般的拼写检查
NSTextView
特别是“使用拼写检查器”和“文本检查和替换”方法
This question只是打开和关闭功能
真正只谈及非自动拼写检查的Spell Checking Programming Topics
NSTextViewDelegate
特别是“使用拼写检查程序”方法
分别在调用textShouldBeginEditing:
和textShouldEndEditing:
内部实现NSTextDelegate
[self.textView setAutomaticSpellingCorrectionEnabled:true];
和[self.textView setAutomaticSpellingCorrectionEnabled:false];
(起初我也称NSTextView
} setAutomaticTextReplacementEnabled:
但这只是用户设置,如(c)版权符号)
在相同的textShouldBeginEditing:
和textShouldEndEditing:
(从上方)设置NSTextView
的{{1}}到enabledTextCheckingTypes
和NSTextCheckingAllTypes
分别
对NSTextCheckingAllTypes - NSTextCheckingTypeCorrection
进行子类化并实施NSTextView
和becomeFirstResponder
,并在其中更改与上述相同的属性。
从resignFirstResponder
或NSSpellChecker
调用resignFirstResponder
方法(这适用于textShouldEndEditing:
)隐藏弹出窗口,但仍然会更正拼写)
我注意到Tweetbot中的这个功能你可以使用foriegn vs foreign来测试它。如果你输入它并在气泡仍然启动时发推文,它将发出不正确的拼写错误。
答案 0 :(得分:0)
解决方案是继承NSTextView并重写handleTextCheckingResults:
方法。
- (void)handleTextCheckingResults:(NSArray<NSTextCheckingResult *> *)results forRange:(NSRange)range types:(NSTextCheckingTypes)checkingTypes options:(NSDictionary<NSTextCheckingOptionKey,id> *)options orthography:(NSOrthography *)orthography wordCount:(NSInteger)wordCount {
for (NSTextCheckingResult *result in results) {
if (result.resultType == NSTextCheckingTypeSpelling) {
// you can either suppress all corrections by using `return` here
// or you can compare the original string to the replacement like this:
NSString *originalString = [self.string substringWithRange:result.range];
NSString *replacement = result.replacementString;
// or you can do something more complex (like suppressing correction only under
// certain conditions
return; // we don't do the correction
}
}
// default behaviors, including auto-correct
[super handleTextCheckingResults:results forRange:range types:checkingTypes options:options orthography:orthography wordCount:wordCount];
}
这适用于所有NSTextCheckingType。