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

如何从UIImageView上的ImageAnalysisInteraction获取选中的文本?

从ImageAnalysisInteraction获取选中文本的实现方案

ImageAnalysisInteraction官方确实没有直接暴露获取选中文本的公开API,但它的文本选择完全走系统标准响应链流程,不需要调用私有API即可实现需求,实现方式如下:

核心实现逻辑

  • 优先通过响应链遍历直接获取选中内容:系统的图片文本选择组件在响应链中实现了selectedText方法,可直接拿到当前选中的字符串,无侵入、不干扰用户操作,是目前稳定性最高的方案。
  • 兜底通过临时copy操作获取:极端场景下响应链遍历失效时,可临时触发系统copy动作拿到选中文本,操作完成后立刻恢复剪贴板原有内容,避免影响用户剪贴板数据。

代码示例

// 在你的自定义菜单按钮的响应方法中调用即可
func fetchCurrentSelectedText(interaction: ImageAnalysisInteraction) -> String? {
    // 先判断是否存在激活的文本选择,避免无效读取
    guard interaction.hasActiveTextSelection else { return nil }
    
    // 方案1:遍历响应链获取选中文本
    var currentResponder = next
    while let responder = currentResponder {
        let selector = Selector(("selectedText"))
        if responder.responds(to: selector),
           let selectedText = responder.perform(selector)?.takeUnretainedValue() as? String,
           !selectedText.isEmpty {
            return selectedText
        }
        currentResponder = responder.next
    }
    
    // 方案2:兜底临时copy方案
    let originContent = UIPasteboard.general.string
    UIMenuController.shared.update()
    UIApplication.shared.sendAction(#selector(UIResponder.copy(_:)), to: nil, from: self, for: nil)
    let selectedText = UIPasteboard.general.string
    // 恢复剪贴板原有内容
    if let origin = originContent {
        UIPasteboard.general.string = origin
    } else {
        UIPasteboard.general.strings = []
    }
    return selectedText
}

注意事项

  • 响应链遍历方案从iOS 16(ImageAnalysisInteraction正式上线的系统版本)到当前最新iOS版本均生效,属于访问系统响应者标准属性的操作,不会触发App Store审核的私有API拦截。
  • 如果需要获取选中文本对应的图片坐标、识别置信度等附加信息,可以将拿到的选中文本和ImageAnalysis实例中transcript属性存储的全量识别文本、位置数据做匹配定位即可。
  • 不要在菜单弹出之外的时机调用该方法,只有当文本选择处于激活状态、系统菜单弹出时才能拿到有效内容。

内容的提问来源于stack exchange,提问作者Tom Hamming

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:48:39