在Mac OSX文本视图中,可以输入带有一系列按键的重音字符(例如,选项e e以获得e-acute)。有没有办法在自定义NSView中访问此功能。在我的例子中,我有从NSOpenGLView派生的类。我已经为keyDown实现了一个响应器:所以我可以获得来自单个按下的unicode字符,但是通过序列我只获得单个按下的事件。我希望来自NSResponder的interpretKeyEvents会有所帮助,但似乎没有。
我可以通过复制NSTextView的功能来实现它,但我想它会很棘手,特别是如果人们使用不同的键盘设置来挖掘它。
答案 0 :(得分:1)
NSTextField做了一些非常相似的事情,因为它没有自己的编辑工具,而是将它们委托给父窗口的“字段编辑器”,这是一个不可见的NSTextView实例。您还可以在NSText中没有窗口的情况下获得大量NSTextView行为。
可能值得检查NSTextFields如何委托给字段编辑器,看看你是否可以用同样的方式将自己挂钩到字段编辑器中,而不是做你的keyDown:events。
另一种可能是创建一个不可见的NSTextView并将每个按键委托给它,然后在你自己的视图中显示与之关联的NSTextStorage。
听起来你有点痛苦,但这就是我从探索开始的。
当然,我不是Cocoa Text Subsystem向导..
我希望这会有所帮助。
答案 1 :(得分:1)
调用interpretKeyEvents:是正确的方法,但您还需要实现其他方法,这些方法会在标记文本(我总是称为“进行中文本”)或要插入的文本到达视图时通知您。 / p>
您的NSView必须实现NSTextInputClient。请参阅Cocoa参考here。搜索该协议中的一些方法在github上找到了这个chunk of code。这看起来是一个非常好的起点。
对于你要求的东西,用英语和至少一种其他西方语言(法语是好的)进行测试就足够了。但从长远来看,您还需要使用至少一个Kotoeri和Hangul布局进行测试。然而,我上面链接的代码看起来会处理你可以抛出的大部分文本。