iPhone: изменение языка клавиатуры

Я пытаюсь предоставить другую поддержку языка в моем приложении iOS 5.x всякий раз, когда открывается родная клавиатура. Обеспечьте этот язык на встроенной клавиатуре программным способом. Может ли кто-нибудь помочь мне, как я могу его поддержать? Я видел углеродную структуру, но выглядит как ее для Mac-приложений.

Благодарю.

    5 Solutions collect form web for “iPhone: изменение языка клавиатуры”

    Нет, это невозможно – пользователь может изменить свой язык только в настройках.

    Однако вы можете дать пользователю «английскую» клавиатуру, если вы выберете (или спросите их о своих предпочтениях)

    вы делаете это, используя: UIKeyboardTypeASCIICapable

    Вы можете сменить клавиатуру прямо на клавиатуре, нажав «значок глобуса» в нижнем ряду.

    Во-первых, вы должны включить эти языки для ввода в настройках. Затем нажатие кнопки глобуса на клавиатуре будет переключаться между этими языками.

    Вы можете сделать это, начиная с iOS 7 на основе каждого UIResponder. В classе UIResponder есть свойство textInputMode. Это только для чтения, но в документации написано:

    Режим ввода текста определяет язык и клавиатуру, отображаемые, когда активен этот ответчик.

    Для респондентов система обычно отображает клавиатуру, основанную на языковых настройках пользователя. Вы можете переопределить это свойство и использовать его для возврата другого режима ввода текста в случаях, когда вы хотите, чтобы ответчик использовал определенную клавиатуру. Пользователь может по-прежнему менять клавиатуру, пока ответчик активен, но переключается на другой ответчик, а затем обратно восстанавливает указанную вами клавиатуру.

    В моем проекте я создал подclass 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 *) в моем classе 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]; } 

    Теперь мой пользовательский class текстового поля может изменить язык ввода на клавиатуре, просто установив свойство userDefinedKeyboardLanguage на нужный язык.

    Я знаю, что это старый вопрос, но здесь я могу изменить язык клавиатуры.

    Спасибо @ the4kman за отметку: этот способ может изменить текущую клавиатуру только на те, которые были добавлены в Настройки.

    Swift 3:

     class CustomTextField: UITextField { private func getKeyboardLanguage() -> String? { return "en" // here you can choose keyboard any way you need } override var textInputMode: UITextInputMode? { if let language = getKeyboardLanguage() { for tim in UITextInputMode.activeInputModes { if tim.primaryLanguage!.contains(language) { return tim } } } return super.textInputMode } } 

    Кажется, что это работает, чтобы изменить, например, греческую клавиатуру:

     [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"el", nil] forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults] synchronize]; 

    Декларация:

     @IBOutlet var yourTextField:cTextField!; 

    Использование:

     yourTextField.languageCode = "ru"; 

    Класс cTextField:

     class cTextField: UITextField { // ru, en, .... var languageCode:String?{ didSet{ if self.isFirstResponder{ self.resignFirstResponder(); self.becomeFirstResponder(); } } } override var textInputMode: UITextInputMode?{ if let language_code = self.languageCode{ for keyboard in UITextInputMode.activeInputModes{ if let language = keyboard.primaryLanguage{ let locale = Locale.init(identifier: language); if locale.languageCode == language_code{ return keyboard; } } } } return super.textInputMode; } } 
    Давайте будем гением компьютера.