非常にシンプルなログインページ(ログイン+パスワード)があります。
私のユーザーはフランス語なので、キーボードはフランス語(azerty)です。
IOS 12以降、セキュリティで保護されたパスワードテキストフィールドをクリックすると、デバイスにこのキーボードがインストールされていなくても、キーボードは英語(qwerty)に切り替わります。さらに、このキーボードがインストールされていない場合、キーボードに戻ることはできません。
Secure Text Entryを無効にすると、問題が発生しないことがわかりました。
また、プログラムでisSecureTextEntryを設定しようとすると、バグが発生します。
各テキストフィールドに1つずつ、2つのスクリーンショットを追加しています。
あなたの時間と助けてくれてありがとう。
これは本当にiOSのバグでした=> iOS 12.1で修正されました
私は同じ問題を抱えています。私の場合、このバグは登録画面でのみ表示されます。
その理由は、Appleはクラス/ファンク/パラメータの名前をチェックして、ヒューリスティックで)ログイン/登録画面であるかどうかを判断し、自動入力パスワードを有効にします。私のコードの「パテ」で、問題は解決しました。
2つのテキストフィールド(セキュリティテキストエントリ)と「RegisterViewController」という名前のビューコントローラーを備えたサンプルアプリでこの問題を再現します。 「PatateViewController」では、問題はありません。
さらに、コンソールにこのエラーがあります:[AutoFill]アプリbundleIDの自動強力なパスワードを表示できません:***エラーのため:iCloudキーチェーンが無効になっています
ソース: https://developer.Apple.com/documentation/security/password_autofill
コードの名前を変更するよりも良い方法が見つかることを願っています。
最近、アプリケーションで同じ問題が発生しました。この問題は、AppleのPasswordAutofillの新機能に関連しています。
この問題を回避するには、この小さなコードを安全なテキストフィールドに適用します
if #available(iOS 12.0, *) {
tfPassword.textContentType = .oneTimeCode
}
これでこのバグは解決するはずです。これにより、このエラーも修正されます。
[オートフィル]アプリbundleIDの自動強力パスワードを表示できません:***エラーのため:iCloudキーチェーンが無効になっています
Ps:この新しい機能をアプリに追加することもできます。これは、この新機能の実装方法に関するプロセスを説明する記事へのリンクです。 パスワードの自動入力の実装方法に関する説明
それが役に立てば幸い。
同じ問題があり、all my textFields textContentType
プロパティをUITextContentType.oneTimeCode
に設定することで解決しました。
もちろん、oneTimeCode
はどこにでもあるので役に立たなくなりました...
スウィフト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"
}
お役に立てば幸いです。
バグがより少なく、ソリューションがよりレーマーである必要があります。つまり、Appleがどのように動作するのかということです。
私の解決策は、パスワードフィールドにフォーカスを設定してから最初のフィールドにフォーカスすることでした。私の場合は、usernameFieldでした。
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.passwordTextField becomeFirstResponder];
[self.usernameTextField becomeFirstResponder];
}
iOS 12.1は私のために問題を修正しました。
また、パスワードテキストフィールドのパラメータtextContentType
を.oneTimeCode
に設定する必要があります