【发布时间】:2021-05-04 21:18:37
【问题描述】:
我的视图中有多个 TextField,我想根据用户点击的 TextField 更改键盘语言。我知道我可以更改 .numberPad 之类的类型,但语言如何?
【问题讨论】:
-
This answer 暗示这是不可能的。这是一个较旧的答案,但我认为它没有改变。在提出问题之前,您是否对此进行了良好的网络搜索?如果你这样做了但找不到肯定的答案,那可能只是意味着不可能。
我的视图中有多个 TextField,我想根据用户点击的 TextField 更改键盘语言。我知道我可以更改 .numberPad 之类的类型,但语言如何?
【问题讨论】:
如果用户已将语言添加到他的键盘,您可以制作自定义文本字段并执行以下操作:
创建自定义文本字段和文本字段视图
import Foundation
import UIKit
import SwiftUI
class SpecificLanguageTextField: UITextField {
var language: String? {
didSet {
if self.isFirstResponder{
self.resignFirstResponder();
self.becomeFirstResponder();
}
}
}
override var textInputMode: UITextInputMode? {
if let language = self.language {
for inputMode in UITextInputMode.activeInputModes {
if let inputModeLanguage = inputMode.primaryLanguage, inputModeLanguage == language {
return inputMode
}
}
}
return super.textInputMode
}
}
struct SpecificLanguageTextFieldView: UIViewRepresentable {
let placeHolder: String
var language: String = "en-US"
@Binding var text: String
func makeUIView(context: Context) -> UITextField{
let textField = SpecificLanguageTextField(frame: .zero)
textField.placeholder = self.placeHolder
textField.text = self.text
textField.language = self.language
return textField
}
func updateUIView(_ uiView: UITextField, context: Context) {
}
}
然后像这样使用它:
import SwiftUI
struct SpecificLanguageView: View {
@State var text: String = ""
var body: some View {
SpecificLanguageTextFieldView(placeHolder: "test", language: "en-GB", text: $text)
}
}
struct SpecificLanguageView_Previews: PreviewProvider {
static var previews: some View {
SpecificLanguageView()
}
}
【讨论】: