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

SwiftUI开发watchOS应用如何通过按钮触发听写输入功能

问题解答

功能实现方案说明

watchOS 7及以上版本可以完全通过纯SwiftUI实现点击按钮直接唤起听写的功能,不需要桥接UIKit,实现逻辑更简单,兼容性也更好:

  • 你可以隐藏一个绑定了焦点状态的TextField,点击按钮时把焦点状态设为激活,系统会自动唤起输入面板
  • 如果要默认直接进入听写模式(跳过候选词、手写选项),watchOS 9及以上版本可以给TextField添加.keyboardType(.dictation)修饰符

纯SwiftUI实现参考代码:

import SwiftUI

struct ContentView: View {
    @State private var inputText = ""
    @FocusState private var isInputFocused: Bool
    
    var body: some View {
        VStack {
            // 隐藏TextField只用来触发输入
            TextField("", text: $inputText)
                .focused($isInputFocused)
                .opacity(0)
                .frame(height: 0)
            
            Button(action: {
                isInputFocused = true
            }) {
                Image(systemName: "plus")
                    .font(.largeTitle)
            }
        }
    }
}

现有代码无响应的原因

你当前编写的桥接代码没有反应,核心原因是项目使用了SwiftUI原生的Watch App生命周期(即项目入口为带@main标记的App结构体,无独立WatchKit Extension目标),这种情况下WKExtension.shared().visibleInterfaceController会返回nil,后续的唤起逻辑自然不会执行。
如果要继续使用桥接方案,你需要将项目的生命周期切换为旧版WatchKit Extension模式,才能正常获取到当前的界面控制器实例。另外如果要默认直接进入听写,可以把allowedInputMode参数改为.dictation。

内容的提问来源于stack exchange,提问作者Tobias Fünke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:07