I have several TextFields in my View and I would like change the language of the keyboard depending on in which TextField the user tapped. I know I can change the type like .numberPad
, but how for languages?
Asked
Active
Viewed 1,021 times
3

Jonas Deichelmann
- 3,513
- 1
- 30
- 45

Erik
- 449
- 5
- 13
-
[This answer](https://stackoverflow.com/q/28318076/725628) suggests it's not possible. It's a bit of an older answer, but I don't think it has changed. Did you do a good web search for this before asking the question? If you did and couldn't find a positive answer it probably just means it's not possible. – EmilioPelaez Jan 31 '21 at 14:47
-
Build a custom keyboard https://developer.apple.com/documentation/uikit/keyboards_and_input/creating_a_custom_keyboard – mahan Jan 31 '21 at 15:29
1 Answers
1
If the user has added the language to his keyboards you can make a custom textfield and do the following:
create a custom textfield and textfield view
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) {
}
}
And then use it like this:
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()
}
}

ARR
- 2,074
- 1
- 19
- 28