我正在构建我的第一个 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()
}
}
在 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()
}
}