macos - 以编程方式实现 Mac 长按重音弹出
问题描述
我正在处理的应用程序使用自定义文本编辑器。问题是它因此不使用 Mac 现在标准的长按键重音弹出窗口,即按住“A”将产生“aaaaaaaaaa”而不是“à á â ä...”窗口。
任何人都知道是否可以以编程方式调用/以其他方式实现该重音弹出窗口?
解决方案
正确处理关键事件以便它们与系统正确交互在Cocoa 文本架构指南的创建自定义文本视图部分中进行了讨论。您还应该熟悉Cocoa 事件处理指南的“处理关键事件”一章(尽管它有点过时;特别是它指的是已弃用的协议,已被 替换)。NSTextInput
NSTextInputClient
基本要点是您应该通过-[NSTextInputContext handleEvent:]
or发送关键事件-[NSResponder interpretKeyEvents:]
,在您的视图上实现操作方法,并让您的视图类采用并实现该NSTextInputClient
协议。
您从 的属性获取对适当NSTextInputContext
对象的引用。inputContext
NSView
通过这些处理程序方法之一发送键事件是激活按住功能的方式。NSTextInputClient
协议方法是它最终与文本视图的文档模型交互的方式。当用户从弹出框中选择一个字符时,该功能使用该协议将初始字符实际替换为最后一个字符。
这也将允许您的文本视图处理亚洲输入法。
推荐阅读
- can-bus - 如何在 OBD2 的帮助下从汽车获取原始 CAN 流量?
- mysql - sql developer mysql 使用本地主机而不是远程主机连接到远程数据库
- nginx - 达芙妮 vs 达芙妮+Gunicorn 设置
- opengl - 带有 xorg7 的 gstreamer gl 显示不好
- apache - Cloud Run + Apache + 负载均衡器:如何正确获取路径?
- reactjs - 将标题转换为独立组件后的 0 大小字体真棒图标
- python - 从另一个数据框的百分位创建数据框
- kubernetes - 在 Helm 测试中具有临时入口的 Kubernetes 作业
- github - 如何在文件名前添加 ._ 的 git 忽略文件?
- linux - mcelog 缓存错误,如何在 Intel i7 CPU 上禁用 L3 缓存