首页 文章

NSTextView自动拼写检查无法正常工作

提问于
浏览
0

我有一个继承自NSTextView的类,在初始化时,使用 setContinuousSpellCheckingEnabled(true) 设置自动拼写检查,并在聚焦时将自身设置为第一个响应者 . 基于我迄今为止看到的所有问题和答案,似乎这应该足以确保拼写检查工作正常 .

但是当我在视图中键入乱码时,除非单词输入速度相对较快,否则不会强调任何拼写错误的单词 . 也就是说,当我在大约半秒钟内输入带有空格的“asdf”时,拼写检查器会正确地强调它 . 但是如果我输入“asdf”的速度比较慢,或者即使我快速键入“asdf”但是在添加空格之前等待一秒钟,这个单词上也不会显示下划线 .

这导致可能多次输入具有冲突拼写评估的相同单词,如下所示 .

在测试期间甚至有一次我看到红色下划线出现瞬间,然后立即从我输入的拼写错误的单词中消失 .

另外值得注意的是,如果焦点离开并重新进入文本视图,在焦点约1秒后,所有拼写下划线都出现在所有拼写错误的单词下的正确位置 . 然而,继续输入其他文本仍然会引起我上面提到的问题 .

这意味着拼写错误的单词不会被加下划线

  • 他们输入速度不合理

  • 在聚焦视图之前,已将它们键入文本视图

正如我之前所说的那样,我已经查看了所有相关的SO线程,并且我也广泛地使用了对 makeFirstResponder()setContinuousSpellCheckingEnabled() 的调用,而我只是用尽了想法 .

快速更新,自上周以来我已经尝试了一些其他的东西,其中一个显示出了希望 . 使用TextView函数 setSpellingState ,我能够以编程方式强制红色波浪形下划线出现在TextView中我想要的任何位置 . 虽然这似乎很有希望,但是使用这个函数反而发现了另一个错误的行为:当我调用这个函数并在视图中的某处出现一个红色波浪形时,波浪线只会短暂出现 . 出现了波浪形的红色下划线,并且在我看到的延迟大致相同的延迟后,波浪线消失了 . 这使我认为问题可能是由C#代码引起的,这些代码覆盖了一些Cocoa API .

这是OSX问题吗?为什么某些东西像我输入拼写检查器是否会正确地强调一个单词的决定因素的速度一样随意?

附:代码的语法与Objective-C语法不同,因为我使用的是MCocoa,它是一个机器生成的Cocoa API包装器 . 我目前用于引用NSTextView的C#代码是从MacOSX 10.5 SDK生成的

1 回答

  • 0

    当使用 setSpellingState 时,由于 setSpellingState 与自动拼写检查器之间的竞争条件,有时会出现波浪线并立即消失 . 似乎他们两个都试图同时突出一个词,他们会互相取消 . 由于自动拼写检查器's behavior is what'首先导致整个问题,我只是用 setContinuousSpellCheckingEnabled(false) 替换 setContinuousSpellCheckingEnabled(true) ,防止自动拼写检查器干扰我自己的实现 . 现在红色的波浪线下划线正确显示,无论我怎么输入这个词!只要它当然拼写错误:)

    对于任何遇到NSTextView自动拼写检查问题的人,我只能使用 setContinuousSpellCheckingEnabled(false) 禁用自动拼写检查,并使用 NSSpellChecker.shared() 检查拼写错误的单词并使用 setSpellingState 来强制绘制红色波浪形拼写指示器 . 根据 NSSpellChecker 创建的拼写错误的单词 . 所有这些都是在 textViewDidChangeSelection 的实现中完成的,因此每次通过键入,从不完整的单词移动光标或粘贴文本来更改选择时都可以检查单词 .

相关问题