IPhone: изменение языка клавиатуры
Я пытаюсь предоставить другую поддержку языка в моем приложении iOS 5.x всякий раз, когда открывается родная клавиатура. Обеспечьте этот язык на встроенной клавиатуре программным способом. Может ли кто-нибудь помочь мне, как я могу его поддержать? Я видел углеродную структуру, но выглядит как ее для Mac-приложений.
Спасибо.
Ответы
Ответ 1
Нет, это невозможно - пользователь может изменять свой язык только в настройках.
Однако вы можете дать пользователю "английскую" клавиатуру, если вы выберете (или спросите их о своих предпочтениях)
сделайте это, используя: UIKeyboardTypeASCIICapable
Вы можете сменить клавиатуру прямо на клавиатуре, нажав "значок глобуса" в нижней строке.
Сначала вы должны включить эти языки для ввода в настройках. Затем нажатие кнопки глобуса на клавиатуре будет переключаться между этими языками.
Ответ 2
Вы можете сделать это, начиная с iOS 7 на основе каждого UIResponder.
В классе UIResponder есть свойство textInputMode. Это только для чтения, но в документации говорится:
В режиме ввода текста отображается отображаемый язык и клавиатура когда этот ответчик активен.
Для респондентов система обычно отображает клавиатуру на основе по языковым предпочтениям пользователей. Вы можете переопределить это свойство и используйте его, чтобы вернуть другой режим ввода текста в тех случаях, когда вы хотите ответчик использовать определенную клавиатуру. Пользователь все еще может изменить клавиатура, в то время как ответчик активен, но переключается на другой ответчик, а затем назад восстанавливает указанную вами клавиатуру.
В моем проекте я создал подкласс UITextField и определил новое свойство, называемое userDefinedKeyboardLanguage. Я также перегрузил вышеупомянутый метод textInputMode. Он выглядит примерно так:
- (UITextInputMode *) textInputMode {
for (UITextInputMode *tim in [UITextInputMode activeInputModes]) {
if ([[Utilities langFromLocale:userDefinedKeyboardLanguage] isEqualToString:[Utilities langFromLocale:tim.primaryLanguage]]) return tim;
}
return [super textInputMode];
}
У меня также есть собственный метод + (NSString *) langFromLocale: (NSString *) в моем классе Utilities, который выглядит следующим образом:
+ (NSString *)langFromLocale:(NSString *)locale {
NSRange r = [locale rangeOfString:@"_"];
if (r.length == 0) r.location = locale.length;
NSRange r2 = [locale rangeOfString:@"-"];
if (r2.length == 0) r2.location = locale.length;
return [[locale substringToIndex:MIN(r.location, r2.location)] lowercaseString];
}
Теперь мой пользовательский класс текстового поля может изменить язык ввода на клавиатуре, просто установив свойство userDefinedKeyboardLanguage на нужный язык.
Ответ 3
Я знаю, что это старый вопрос, но здесь это мой способ изменить язык клавиатуры
Swift 3:
override var textInputMode: UITextInputMode? {
let language = type.getKeyboardLanguage()
if language.isEmpty {
return super.textInputMode
} else {
for tim in UITextInputMode.activeInputModes {
if tim.primaryLanguage!.contains(language) {
return tim
}
}
return super.textInputMode
}
}
Я выбрал один язык из какого поля я сфокусирован
func getKeyboardLanguage() -> String {
switch self {
case .one:
return "en"
case .two:
return "ru"
case .three:
return ""
case .four:
return ""
}
}
Ответ 4
Это, похоже, работает, чтобы изменить, например, греческую клавиатуру:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"el", nil]
forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];