Подтвердить что ты не робот

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

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

Спасибо.

4b9b3361

Ответ 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];