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

如何在SwiftUI中为自定义输入框触发iOS内置听写功能?

自定义SwiftUI输入框集成iOS听写功能的正确实现

核心解决思路

TextInputDictationActivation正是官方用来触发听写的工具,之前没反应大概率是没绑定好输入框焦点,或者激活逻辑不对。必须把它和输入框的焦点状态绑定,配合按钮点击来触发听写流程。

完整可运行代码

import SwiftUI

struct CustomDictationInputView: View {
    @State private var inputContent = ""
    @FocusState private var isInputFocused: Bool
    @State private var triggerDictation = false
    
    var body: some View {
        HStack(spacing: 8) {
            // 自定义输入框
            TextField("请输入内容", text: $inputContent)
                .focused($isInputFocused)
                // 绑定听写激活状态
                .textInputDictationActivation(.constant(triggerDictation))
                .onChange(of: triggerDictation) { isActive in
                    if isActive {
                        // 强制输入框获取焦点,否则听写结果无法写入
                        isInputFocused = true
                    }
                }
            
            // 听写触发按钮
            Button {
                triggerDictation = true
            } label: {
                Image(systemName: "mic.fill")
                    .foregroundColor(.accentColor)
            }
            // 监听听写结束,重置激活状态
            .onReceive(NotificationCenter.default.publisher(for: UITextInput.currentInputModeDidChangeNotification)) { _ in
                triggerDictation = false
            }
        }
        .padding(.horizontal, 12)
        .padding(.vertical, 8)
        .border(Color.gray.opacity(0.3), cornerRadius: 8)
    }
}

#Preview {
    CustomDictationInputView()
}

关键注意点

  • 焦点必须激活:如果输入框没获取焦点,听写启动后也无法把结果写入输入框,所以按钮点击时要强制让输入框聚焦。
  • 权限配置不能忘:在Info.plist里添加NSSpeechRecognitionUsageDescription键,填写比如“需要使用语音识别来将语音转换为文字”,否则会被系统拒绝授权,听写直接用不了。
  • 状态重置:听写结束后要把triggerDictation设回false,不然下次点击按钮可能没反应,这里用系统通知来监听听写结束事件。

排查要点

  • 点击按钮没反应:检查输入框是否真的获取了焦点,可在按钮点击后打印isInputFocused的值确认;另外确认设备所在地区支持听写功能,部分地区可能受限。
  • 有听写界面但无结果:检查Info.plist的权限描述是否正确,以及用户是否在系统设置里授予了语音识别权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:52:09