gpt4 book ai didi

objective-c - 自定义 NSTextView insertText :replacementRange breaks Spell Checking

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:45 25 4
gpt4 key购买 nike

我有一个自定义的 NSTextView 子类,还有一个自定义的 NSTextStorage 组件。 NSTextStorage 根据上下文修改用户输入的文本。

因为最终文本可能比用户最初输入的文本短,所以我不得不覆盖 insertText:replacementRange在我的 NSTextView 中。一个最小的例子是:

- (void) insertText:(id)string replacementRange:(NSRange)replacementRange {
if ([self hasMarkedText]) {
[[self textStorage] replaceCharactersInRange:[self markedRange] withString:string];
} else {
[[self textStorage] replaceCharactersInRange:[self selectedRange] withString:string];
}

[self didChangeText];
}

这在几个月的广泛测试中工作正常......除了自动拼写检查和更正被禁用。 “波浪形”不会出现在拼写错误的单词下方,除非我停止键入、移动鼠标​​并将焦点切换到我的应用程序或从我的应用程序切换焦点。几秒钟后,整个 TextView 都进行了拼写检查。因为它是事后发生的,所以自动更正当然是禁用的。

如果我禁用自定义 insertText:replacementRange:方法,其他一切正常,自动拼写功能返回。我只需要注意不要触发导致缩短文本的更改,因为它会触发属性超出范围错误(首先是我的自定义方法的原始原因。)

显然是 Apple 对 insertText:replacementRange: 的实现比我做的更多。我在 [self checkTextInRange...] 上尝试了多种变体, [self checkTextInSelection:]等。它们都没有恢复正常的功能。

搜索 Apple 的文档并不能帮助我找到我从我的方法中遗漏的导致拼写检查中断的内容。任何指示或想法将不胜感激!!

提前致谢!

编辑:以下是我的 NSTextStorage 提供的各种行为的一些示例。 (| 代表插入符号)

开始于:

* item
* |

如果我按下回车键,我会得到以下结果(删除 *<space> ):

* item
|

另一个例子,如果启用“更改跟踪”:

this is thee| time

如果我点击删除:

this is the|{--e--} time

如您所见,一次击键可能会导致在文本中添加或删除多个字符。

编辑 2:仅供引用——当在文档末尾按回车键时发生缩短时,我遇到的属性超出范围的问题——NSTextview 尝试设置新的段落样式才发现文档比预期的要短。我找不到更改 NSTextview 目标范围的方法。

最佳答案

我有一个部分解决方案。

在我的自定义 insertText:replacementRange: 方法中,在 didChangeText 之前:

NSinteger wordCount;
NSOrthography * orthography;

static NSInteger theWordCount;
NSOrthography * orthography;

NSRange spellingRange = <range to check>

NSArray * results = [[NSSpellChecker sharedSpellChecker] checkString:[[self textStorage] string]
range:spellingRange
types:[self enabledTextCheckingTypes]
options:NULL
inSpellDocumentWithTag:0
orthography:&orthography
wordCount:&theWordCount];
if (results.count) {
[self handleTextCheckingResults:results forRange:spellingRange types:[self enabledTextCheckingTypes] options:@{} orthography:orthography wordCount:theWordCount];
}

然而,这是不完整的:

  • 拼写检查和语法检查工作正常
  • 自动拼写更正和文本替换不起作用(即使启用)

关于objective-c - 自定义 NSTextView insertText :replacementRange breaks Spell Checking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45705424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com