it-swarm.com.de

Native UITextField Secure Text Entry erzwingt die deutsche Tastatur

Ich habe eine sehr einfache Login-Seite (Login + Passwort).

Meine Benutzer sind Franzosen, ihre Tastatur ist also Französisch (Azerty).

Wenn Sie seit iOS 12 auf das gesicherte Kennwort-Textfeld klicken, wechselt die Tastatur zu Englisch (qwerty), auch wenn diese Tastatur nicht auf ihren Geräten installiert ist. Wenn diese Tastatur nicht installiert ist, können sie nicht zu ihrer Tastatur wechseln.

Ich habe herausgefunden, dass das Problem nicht angezeigt wird, wenn ich die sichere Texteingabe deaktivieren.

Ich habe auch versucht, isSecureTextEntry programmgesteuert festzulegen, und der Fehler wird angezeigt.

Ich füge zwei Screenshots hinzu, einen für jedes Textfeld.

Vielen Dank für Ihre Zeit und Hilfe.

 enter image description here

 enter image description here

11
Thib L

Dies war wirklich ein iOS-Fehler => in iOS 12.1 behoben

0
Thib L

Ich habe das gleiche Problem, in meinem Fall tritt dieser Fehler nur bei einem Registrierungsbildschirm auf.

Der Grund ist, dass Apple den Namen des Parameters class/func/überprüft, um zu ermitteln (mit Heuristiken), ob es sich um einen Anmeldebildschirm handelt, und automatisch das automatische Ausfüllen des Kennworts zu aktivieren. Durch Ersetzen von "register" durch "Patate" im Code , das Problem ist gelöst.

Ich reproduziere dieses Problem mit einer Beispiel-App mit 2 Textfeldern (mit einem Sicherheitstexteingabe) und einem View-Controller mit dem Namen "RegisterViewController". Mit einem "PatateViewController" habe ich das Problem nicht.

Außerdem habe ich diesen Fehler in der Konsole: [AutoFill] Kann keine automatischen starken Kennwörter für die App bundleID anzeigen: *** aufgrund eines Fehlers: iCloud Keychain ist deaktiviert

Quelle: https://developer.Apple.com/documentation/security/password_autofill

Ich hoffe, Sie finden einen besseren Weg, als Ihren Code umzubenennen.

3
Nico

Hatte dasselbe Problem und löste es, indem die all my textFields textContentType-Eigenschaft auf UITextContentType.oneTimeCode gesetzt wurde.

Natürlich ist oneTimeCode jetzt unbrauchbar, da es überall ist ...

1

Ich hatte das gleiche Problem vor kurzem auf unserer Anwendung ... Das Problem ist mit der neuen Funktion von PasswordAutofill von Apple verbunden.

Um dieses Problem zu umgehen, können Sie diesen Code in Ihrem sicheren Textfeld anwenden

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

Dies sollte diesen Fehler beheben. Dies sollte auch diesen Fehler beheben: 

[AutoFill] Kann für die BundleID der Anwendung keine automatischen sicheren Kennwörter anzeigen: *** aufgrund eines Fehlers: iCloud Keychain ist deaktiviert

Ps: Sie können dieses neue Feature auch Ihrer App hinzufügen .. Dies ist ein Link zu einem Artikel, in dem der Prozess zum Implementieren dieses neuen Features erläutert wird Erläuterung zum Implementieren des Kennworts für das automatische Ausfüllen

Ich hoffe es hilft.

0
Martin

Je lamer ein Bug ist, desto lamer sollte die Lösung sein, ich meine, was für eine lahme Arbeit von Apple.

Meine Lösung bestand darin, den Fokus auf das Passwortfeld und dann auf das erste Feld zu legen, in meinem Fall auf den BenutzernamenFeld.

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

iOS 12.1 hat das Problem für mich behoben.

Sie müssen auch den Parameter textContentType des Kennwort-Textfelds auf .oneTimeCode setzen.

0
ndelanou

Swift 3:

Erstellen Sie eine Basisklasse für UITextField mit languageCode und 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;
}}

Verwendungszweck:

Setzen Sie Ihren Wert (ru, en, ...) auf languageCode. Dadurch wird das Gebietsschema auf der Tastatur geändert.

private func textConfigure(textField: UITextField) {

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

Hoffe dir zu helfen.

0
kurlyk