Родной UITextField безопасный ввод текста форсирует английскую (US) клавиатуру - PullRequest
0 голосов
/ 08 октября 2018

У меня очень простая страница входа (логин + пароль).

Мои пользователи французские, поэтому их клавиатура французская (azerty).

Начиная с iOS 12, когда они нажимают наВ защищенном текстовом поле пароля клавиатура переключается на английский (qwerty), даже если на их устройствах не установлена ​​клавиатура.Более того, если у них не установлена ​​эта клавиатура, они не могут переключиться обратно на свою клавиатуру.

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

Я также попытался установить isSecureTextEntry программно, и ошибка обнаруживается.

Я добавляю два снимка экрана, по одному для каждого текстового поля.

Большое спасибо за ваше время и помощь.

enter image description here

enter image description here

Ответы [ 7 ]

0 голосов
/ 05 февраля 2019

Была такая же проблема и решена, установив all my textFields textContentType свойство в UITextContentType.oneTimeCode.

Конечно, oneTimeCode теперь бесполезен, поскольку он везде ...

0 голосов
/ 23 апреля 2019

Чем хуже ошибка, тем лучше должно быть решение для ламера, я имею в виду, какая неудачная работа у Apple.

Мое решение заключалось в том, чтобы сосредоточиться на поле пароля, а затем сосредоточиться на первом поле,в моем случае это был usernameField.

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self.passwordTextField becomeFirstResponder];
    [self.usernameTextField becomeFirstResponder];
}
0 голосов
/ 08 января 2019

iOS 12.1 устранила проблему для меня.

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

0 голосов
/ 13 декабря 2018

У меня была такая же проблема, недавно появившаяся в нашем приложении.Проблема связана с новой функцией PasswordAutofill от Apple.

Чтобы обойти эту проблему, вы можете применить этот маленький кусочек кода к безопасному текстовому полю

    if #available(iOS 12.0, *) {
        tfPassword.textContentType = .oneTimeCode
    }

Это должно решить эту ошибку.Это также должно исправить эту ошибку:

[Автозаполнение] Невозможно отобразить автоматические надежные пароли для идентификатора пакета приложения: *** из-за ошибки: брелок iCloud отключен

Ps:Вы также можете добавить эту новую функцию в свое приложение.Это ссылка на статью, объясняющую процесс реализации этой новой функции Объяснение того, как реализовать автозаполнение пароля

Надеюсь, это поможет.

0 голосов
/ 08 декабря 2018

У меня такая же проблема, в моем случае эта ошибка появляется только с экраном регистра.

Причина в том, что Apple проверяет имя параметра / func / для определения (с эвристикой), если оноэто экран входа / регистрации и автоматической активации пароля.Заменив «register» на «Patate» в моем коде, проблема будет решена.

Я воспроизвожу эту проблему с примером приложения с 2 текстовыми полями (с вводом защищенного текста) и контроллером представления с именем «RegisterViewController»,С "PatateViewController" у меня нет проблемы.

Более того, у меня есть эта ошибка в консоли: [Автозаполнение] Не удается отобразить автоматические надежные пароли для идентификатора пакета приложения: *** из-за ошибки: iCloud Keychain отключен

Источник: https://developer.apple.com/documentation/security/password_autofill

Надеюсь, вы найдете лучший способ, чем переименовать код.

0 голосов
/ 26 ноября 2018

Это была действительно ошибка iOS => исправлена ​​в iOS 12.1

0 голосов
/ 08 октября 2018

Swift 3:

Создание базового класса для UITextField с languageCode и textInputMode.

class BaseTextField: 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;
}}

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

Установите значение (ru, en, ...) в languageCode.Это заставит изменить язык на клавиатуре.

private func textConfigure(textField: UITextField) {

    textField.keyboardType = .default
    textField.autocapitalizationType = .words
    textField.languageCode = "ru"
}

Надеюсь, вам поможет.

...