You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Mac其他应用上叠加SwiftUI Views并实现光标弹窗文本编辑?

解决方案

一、在其他应用光标位置显示悬浮窗口

  • 你已经通过Accessibility API获取到光标位置,接下来可以基于NSWindow(macOS平台)创建无边框、置顶的悬浮窗口:

    1. 配置窗口样式:设置styleMask为.borderless,窗口层级level设为.popUpMenu或.statusBar,确保窗口能显示在其他应用上方
    2. 转换光标坐标:将Accessibility API拿到的局部坐标转为全局屏幕坐标,再计算窗口显示位置(比如光标上方偏移10px,避免遮挡输入区域)
    3. 定位并显示窗口:调用setFrame(_:display:animate:)设置窗口位置,再用makeKeyAndOrderFront(nil)触发显示
  • 注意事项:

    • 必须确保你的应用已获得系统的辅助功能权限(在「系统设置-隐私与安全性-辅助功能」中开启)
    • 监听文本框的光标移动事件,实时更新悬浮窗口位置,避免光标移动后窗口错位

二、编辑其他应用中的文本

  • 基于Accessibility API可以实现文本编辑,步骤如下:

    1. 获取目标文本框的AXUIElement实例(你能获取光标位置,应该已经能定位到对应的元素)
    2. 直接插入表情:调用AXUIElementPerformAction执行kAXInsertTextAction动作,传入表情文本即可插入到光标位置
    3. 替换表情名称:先通过AXUIElementCopyAttributeValue获取文本框全部内容,匹配并替换冒号包裹的表情名称后,再用AXUIElementSetAttributeValue更新文本框内容;或者结合光标位置定位到目标文本段进行精准替换
  • 示例Swift代码片段(macOS):

// 向目标文本框插入指定文本
func insertEmoji(to textFieldElement: AXUIElement, emoji: String) {
    let emojiCF = emoji as CFString
    AXUIElementPerformAction(textFieldElement, kAXInsertTextAction, emojiCF)
}

三、常见问题排查

  • 悬浮窗口不显示:检查窗口isOpaque是否设为false(无边框窗口需透明背景),窗口层级level是否设置正确,同时确认系统辅助权限已完全授予
  • 无法编辑文本:部分自定义或加密文本框可能不支持Accessibility API,优先测试原生应用(如备忘录、文本编辑)确认功能正常,再排查第三方应用兼容性

内容的提问来源于stack exchange,提问作者A. Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:20:22