来自 SwiftUI 的听写输入

问题描述 投票:0回答:1

我正在构建我的第一个 watchOS 应用程序,我是 Swift 新手,但到目前为止很喜欢它。

我正在尝试创建一个按钮,按下该按钮后,开始以听写模式收听。我在其他 watchOS 应用程序(例如 Drafts)中看到过这样做。

这在 SwiftUI 中是否可行(例如通过

TextField
的某些修饰符),还是我需要桥接到 UIKit 中?

如果只有后者是可能的,我已经尝试过这种方法,但单击按钮似乎没有做任何事情。我错过了什么?

import SwiftUI

struct ContentView: View {
    var body: some View {
        Button(action: {
            presentInputController(withSuggestions: ["testing"], completion: {(answer) -> Void in })
        }) {
            Image(systemName: "plus")
                .font(.largeTitle)
        }
    }
}

extension View {
    typealias StringCompletion = (String) -> Void
    
    func presentInputController(withSuggestions suggestions: [String], completion: @escaping StringCompletion) {
        WKExtension.shared()
            .visibleInterfaceController?
            .presentTextInputController(withSuggestions: suggestions,
                                        allowedInputMode: .plain) { result in
                
                guard let result = result as? [String], let firstElement = result.first else {
                    completion("")
                    return
                }
                
                completion(firstElement)
            }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
ios swift swiftui watchkit
1个回答
0
投票

在 WatchOS 9 中,我们现在有了 TextFieldLink

您可以使用任何视图作为打开文本输入的按钮,而不是使用 TextField

struct ContentView: View {
    @State private var value = ""
    var body: some View {
        VStack {
            Text(value)
            TextFieldLink {
                Image(systemName: "globe")
                    .imageScale(.large)
                    .foregroundColor(.accentColor)
            } onSubmit: { value in
                self.value = value
            }
        }
        .padding()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.