3

问题

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

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

我看过的:

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

  • 分别实现调用and的and和 inside (起初我也叫's但这只是用于用户设置,如(c)到版权符号)NSTextDelegate textShouldBeginEditing:textShouldEndEditing:[self.textView setAutomaticSpellingCorrectionEnabled:true];[self.textView setAutomaticSpellingCorrectionEnabled:false];NSTextViewsetAutomaticTextReplacementEnabled:

  • 在相同的textShouldBeginEditing:textShouldEndEditing:(从上面)中分别设置NSTextView'和。enabledTextCheckingTypesNSTextCheckingAllTypesNSTextCheckingAllTypes - NSTextCheckingTypeCorrection

  • 子类化NSTextView和实现becomeFirstResponderresignFirstResponder并在其中更改与上述相同的属性。

  • NSSpellCheckerresignFirstResponder或调用方法textShouldEndEditing:(这适用于[[NSSpellChecker sharedSpellChecker] dismissCorrectionIndicatorForView:self];)隐藏弹出窗口,但它仍然更正拼写)

例子

我在Tweetbot中注意到了这个功能,你可以使用外国和外国来测试它。如果你在气泡还在的时候输入它并在推特上发布它,它会在推特上发布不正确的拼写。

4

1 回答 1

1

解决方案是继承 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];
}

这适用于所有 NSTextCheckingTypes。

于 2018-07-03T00:34:38.897 回答