NSTextView暂时禁用自动拼写纠正

时间:2013-02-14 01:46:34

标签: objective-c cocoa nstextview

问题

在某些应用程序中,例如邮件客户端或Twitter客户端,我发现自己输入某些内容,一切看起来都很好,当我按下发送/推文按钮时,文本视图会自动将最后一个单词更正为拼写错误。很明显,在那之后我在完成打字之前等待了错误的时间,然后发送它,所以拼写检查仍然在继续。

我想这里的第一个问题应该是你对删除该功能的想法是什么?因为另一方面,我确信人们会发生完全相同的事情,但它实际上修复了最后一个字的拼写,而不是弄乱它。否则,如果您认为这是一个有效的想法是否有办法在NSTextView失去焦点时禁用自动拼写纠正?

我看过的内容:

我实际尝试过(在空项目中的Xcode中)

  • 分别在调用textShouldBeginEditing:textShouldEndEditing:内部实现NSTextDelegate [self.textView setAutomaticSpellingCorrectionEnabled:true];[self.textView setAutomaticSpellingCorrectionEnabled:false];(起初我也称NSTextView } setAutomaticTextReplacementEnabled:但这只是用户设置,如(c)版权符号)

  • 在相同的textShouldBeginEditing:textShouldEndEditing:(从上方)设置NSTextView的{​​{1}}到enabledTextCheckingTypesNSTextCheckingAllTypes分别

  • NSTextCheckingAllTypes - NSTextCheckingTypeCorrection进行子类化并实施NSTextViewbecomeFirstResponder,并在其中更改与上述相同的属性。

  • resignFirstResponderNSSpellChecker调用resignFirstResponder方法(这适用于textShouldEndEditing:)隐藏弹出窗口,但仍然会更正拼写)

实施例

我注意到Tweetbot中的这个功能你可以使用foriegn vs foreign来测试它。如果你输入它并在气泡仍然启动时发推文,它将发出不正确的拼写错误。

1 个答案:

答案 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。