【发布时间】:2016-11-09 20:26:44
【问题描述】:
我有一个继承自 NSTextView 的类,它在初始化时会使用 setContinuousSpellCheckingEnabled(true) 设置自动拼写检查,并在获得焦点时将自己设置为第一响应者。根据到目前为止我在 SO 上看到的所有问题和答案,这似乎足以确保拼写检查器正常工作。
但是当我在视图中输入 gibberish 时,它不会在任何拼写错误的单词下划线,除非该单词的输入速度相对较快。也就是说,当我在大约半秒内键入带有空格的“asdf”时,拼写检查器会正确地加下划线。但是,如果我输入“asdf”的速度慢一些,或者即使我快速输入“asdf”但在添加空格之前等待一秒钟,单词上将不会显示下划线。
这会导致多次键入相同单词时出现拼写评估冲突的可能性,如下所示。
甚至有一次在测试过程中,我看到红色下划线出现一瞬间,然后立即从我输入的拼写错误的单词中消失。
另外值得注意的是,如果焦点离开并重新进入文本视图,在焦点后大约 1 秒后,所有弯曲的下划线都会出现在所有拼写错误的单词下方的正确位置。但是,继续键入其他文本仍然会引发我上面提到的问题。
这意味着拼写错误的单词不会加下划线,除非
它们的输入速度不合理
在聚焦视图之前已将它们输入到文本视图中
正如我之前所说,我已经查看了所有相关的 SO 线程,并且我还广泛使用了对 makeFirstResponder() 和 setContinuousSpellCheckingEnabled() 的调用,但我几乎没有想法了。
快速更新,自上周以来,我尝试了更多的东西,其中之一显示出希望。使用 TextView 函数setSpellingState,我能够以编程方式强制红色波浪下划线出现在我喜欢的 TextView 中的任何位置。尽管这看起来很有希望,但使用此函数却发现了另一个错误行为:当我调用此函数并使红色波浪线出现在视图中的某处时,波浪线只会短暂出现。出现了波浪状的红色下划线,在与我在“asdf”错误中看到的大致相同的延迟量之后,波浪状的线消失了。这使我认为问题可能是在覆盖某些 Cocoa API 的 C# 代码中引起的。
这是 OSX 问题吗?为什么拼写检查器是否会正确地在单词下划线的决定因素与我键入速度一样随意?
附:代码的语法与 Objective-C 语法不同,因为我使用的是 MCocoa,它是一个为 Cocoa API 机器生成包装器的工具。我目前用来引用 NSTextView 的 C# 代码是从 MacOSX 10.5 SDK 生成的
【问题讨论】:
标签: c# macos cocoa spell-checking nstextview