web-dev-qa-db-ja.com

ネイティブUITextField Secure Text Entryは、英語(米国)キーボードを強制します

非常にシンプルなログインページ(ログイン+パスワード)があります。

私のユーザーはフランス語なので、キーボードはフランス語(azerty)です。

IOS 12以降、セキュリティで保護されたパスワードテキストフィールドをクリックすると、デバイスにこのキーボードがインストールされていなくても、キーボードは英語(qwerty)に切り替わります。さらに、このキーボードがインストールされていない場合、キーボードに戻ることはできません。

Secure Text Entryを無効にすると、問題が発生しないことがわかりました。

また、プログラムでisSecureTextEntryを設定しようとすると、バグが発生します。

各テキストフィールドに1つずつ、2つのスクリーンショットを追加しています。

あなたの時間と助けてくれてありがとう。

enter image description here

enter image description here

17
Thib L

これは本当にiOSのバグでした=> iOS 12.1で修正されました

0
Thib L

私は同じ問題を抱えています。私の場合、このバグは登録画面でのみ表示されます。

その理由は、Appleはクラス/ファンク/パラメータの名前をチェックして、ヒューリスティックで)ログイン/登録画面であるかどうかを判断し、自動入力パスワードを有効にします。私のコードの「パテ」で、問題は解決しました。

2つのテキストフィールド(セキュリティテキストエントリ)と「RegisterViewController」という名前のビューコントローラーを備えたサンプルアプリでこの問題を再現します。 「PatateViewController」では、問題はありません。

さらに、コンソールにこのエラーがあります:[AutoFill]アプリbundleIDの自動強力なパスワードを表示できません:***エラーのため:iCloudキーチェーンが無効になっています

ソース: https://developer.Apple.com/documentation/security/password_autofill

コードの名前を変更するよりも良い方法が見つかることを願っています。

10
Nico

最近、アプリケーションで同じ問題が発生しました。この問題は、AppleのPasswordAutofillの新機能に関連しています。

この問題を回避するには、この小さなコードを安全なテキストフィールドに適用します

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

これでこのバグは解決するはずです。これにより、このエラーも修正されます。

[オートフィル]アプリbundleIDの自動強力パスワードを表示できません:***エラーのため:iCloudキーチェーンが無効になっています

Ps:この新しい機能をアプリに追加することもできます。これは、この新機能の実装方法に関するプロセスを説明する記事へのリンクです。 パスワードの自動入力の実装方法に関する説明

それが役に立てば幸い。

4
Martin

同じ問題があり、all my textFields textContentTypeプロパティをUITextContentType.oneTimeCodeに設定することで解決しました。

もちろん、oneTimeCodeはどこにでもあるので役に立たなくなりました...

2

スウィフト3:

LanguageCodeとtextInputModeを使用してUITextFieldの基本クラスを作成します。

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

お役に立てば幸いです。

1
kurlyk

バグがより少なく、ソリューションがよりレーマーである必要があります。つまり、Appleがどのように動作するのかということです。

私の解決策は、パスワードフィールドにフォーカスを設定してから最初のフィールドにフォーカスすることでした。私の場合は、usernameFieldでした。

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self.passwordTextField becomeFirstResponder];
    [self.usernameTextField becomeFirstResponder];
}
0
TheFuquan

iOS 12.1は私のために問題を修正しました。

また、パスワードテキストフィールドのパラメータtextContentType.oneTimeCodeに設定する必要があります

0
ndelanou