it-swarm.com.ru

Родной UITextField безопасный ввод текста форсирует английскую (США) клавиатуру

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

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

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

Я обнаружил, что если я деактивирую Secure Text Entry, проблема не появляется.

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

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

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

 enter image description here

 enter image description here

11
Thib L

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

0
Thib L

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

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

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

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

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

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

3
Nico

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

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

1
Guillaume Berthier

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

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

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

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

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

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

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

0
Martin

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

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

0
ndelanou

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"
}

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

0
kurlyk