Porównaj ceny domen i usług IT, sprzedawców z całego świata

Natywna klawiatura w języku angielskim (USA) z zabezpieczonym polem siłowym UITextField


Mam bardzo prostą stronę logowania (login + hasło).
Moi użytkownicy są po francusku, więc ich klawiatura jest francuska (azerty).
Począwszy od iOS 12, kiedy klikną chronione pole tekstowe hasła, klawiatura przełącza się na angielski (qwerty), nawet jeśli nie mają zainstalowanej tej klawiatury na swoich urządzeniach. Co więcej, jeśli nie mają zainstalowanej tej klawiatury, nie mogą przełączyć się z powrotem na klawiaturę.
Zauważyłem, że jeśli dezaktywuję Bezpieczne wprowadzanie tekstu, problem się nie pojawia.
Próbowałem też programowo ustawić isSecureTextEntry i pojawił się błąd.
Dodaję dwa zrzuty ekranu, po jednym dla każdego pola tekstowego.
Dziękuję bardzo za poświęcony czas i Wsparcie.
https://i.stack.imgur.com/DhguE.jpg
https://i.stack.imgur.com/RN00N.jpg
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Mam ten sam problem, w moim przypadku ten błąd pojawia się tylko na ekranie rejestracji.
Powodem jest to, że Apple sprawdza nazwę klasy/funkcji/parametru, aby określić (za pomocą heurystyki), czy jest to ekran logowania/rejestracji, i automatycznie włączy autouzupełnianie hasła.
Zastąpienie „register” słowem „Patate” w moim kodzie rozwiązuje problem.
Odtworzyłem ten problem za pomocą przykładowej aplikacji z 2 polami tekstowymi (z zabezpieczającym wprowadzaniem tekstu) i kontrolerem widoku o nazwie „RegisterViewController”. Z "PatateViewController" nie mam takiego problemu.
Ponadto mam taki błąd w konsoli:
[Autouzupełnianie] nie może wyświetlać automatycznie silnych haseł dla pakietu aplikacji ID: *** z powodu błędu: pęk kluczy iCloud jest wyłączony
Źródło:

https:// developer.apple.com/documents/security/password_autofill
https://developer.apple.com/do ... ofill
Mam nadzieję, że znajdziesz lepszy sposób niż zmiana nazwy kodu.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Niedawno miałem ten sam problem z trafieniem do naszej aplikacji.
Problem dotyczy nowej funkcji

PasswordAutofill

od Apple.
Aby obejść ten problem, możesz zastosować ten mały fragment kodu do chronionego pola tekstowego
if #available(iOS 12.0, *) {
tfPassword.textContentType = .oneTimeCode
}

Powinno to wyeliminować ten błąd.
Powinno to również naprawić ten błąd:

[Autouzupełnianie] nie może wyświetlać automatycznie silnych haseł dla pakietu aplikacji ID: *** z powodu błędu: pęk kluczy iCloud jest wyłączony

Ps: Możesz również dodać tę nową funkcję do swojej aplikacji.
To jest łącze do artykułu wyjaśniającego proces wdrażania tej nowej funkcji.

Wyjaśnienie, jak zaimplementować autouzupełnianie hasła
https://medium.com/developerin ... a1810
Mam nadzieję że to pomoże.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Miałem ten sam problem i rozwiązałem go ustawiając

wszystko

moja właściwość textFields to
textContentType
do
UITextContentType.oneTimeCode
.
Oczywiście
oneTimeCode
jest teraz bezużyteczny, ponieważ jest wszędzie ...
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To samo rozwiązanie jest teraz w Swiftui:
TextField("placeholder",text: $YourTextBinding)
.textContentType(.oneTimeCode)
.keyboardType(.default)

wystarczy dodać:
.textContentType(.oneTimeCode)
.keyboardType(.default)

do
TextField
lub
SecureField
.
mam nadzieję że to pomoże!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Miałem ten sam problem w React Native, kiedy ustawiłem keyboardType na „numeric-pad”.
Jest to natywny problem z systemem IOS ze względu na domyślny język ustawiony w pliku
info.plist
.
Znalazłem rozwiązanie tutaj:

https://github.com/facebook/re ... 27972
https://github.com/facebook/re ... 27972
Usuń te 2 wiersze, aby zastąpić domyślne ustawienie języka:
<key>CFBundleDevelopmentRegion</key>
<string>en</string>

Możesz także zmienić
& < string & > en & </string & >
na
& < string & > fr & </string & >
, ale wtedy masz ten sam problem z angielskimi użytkownikami, którzy będą mieli włącznik na klawiaturze AZERTY:/
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

iOS 12.1 rozwiązał ten problem za mnie.
Musisz także ustawić parametr
textContentType
pola tekstowego hasła na
.oneTimeCode
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


Swift 3

:
Utwórz klasę bazową dla UITextField z languageCode i 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;
}}


Za pomocą

:
Ustaw wartość (np. En, ...) na languageCode. Zmusi to Cię do zmiany ustawień regionalnych na klawiaturze.
private func textConfigure(textField: UITextField) { textField.keyboardType = .default
textField.autocapitalizationType = .words
textField.languageCode = "ru"
}

Mam nadzieję, że ci pomogę.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Lamer error lamer solution musi być, mam na myśli, tą kiepską pracą Apple'a.
Moim rozwiązaniem było wymuszenie skupienia się na polu hasła, a następnie skupienie się na pierwszym polu, w moim przypadku było to pole usernameField.
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.passwordTextField becomeFirstResponder];
[self.usernameTextField becomeFirstResponder];
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Rzeczywiście był to błąd systemu iOS = & > naprawiono w iOS 12.1
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Na wszelki wypadek naprawiłem to, dodając to do mojego głównego widokuController:
func passwordSignUpViewController(forAuthUI authUI: FUIAuth, email: String, requireDisplayName: Bool) -> FUIPasswordSignUpViewController {
return CustomPasswordSignUpViewController(authUI: authUI, email: email, requireDisplayName: true)
}

I utworzyłem podklasę FUIPasswordSignUpViewController
import Foundation
import FirebaseUIclass CustomPasswordSignUpViewController : FUIPasswordSignUpViewController, UITextFieldDelegate { override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FUIAuth, email: String?, requireDisplayName: Bool) {
super.init(nibName: "FUIPasswordSignUpViewController", bundle: nibBundleOrNil, authUI: authUI, email: email, requireDisplayName: requireDisplayName)
} required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
} override func viewDidLoad() {
super.viewDidLoad()
} func textFieldDidBeginEditing(_ textField: UITextField) {
if #available(iOS 12.0, *) {
textField.textContentType = .oneTimeCode
}
}
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się