2016-10-18 1 views
0

Ich stoße auf ein seltsames Problem. Ich habe ein paar Textfelder in einer Ansicht und wenn sichere Texteingabe für eine von ihnen aktiviert ist, friert meine App ein, wenn ich es ausführe.App friert ein, wenn die sichere Texteingabe im Textfeld aktiviert ist. Swift

Ist jemand auf dieses Problem gestoßen/weiß die Lösung dafür? Ich habe aber eine Recherche gemacht und eine Möglichkeit könnte ein Speicherleck sein. Ansonsten kann ich keine Informationen dazu finden. Jede Hilfe wird sehr geschätzt!

Alle Code, der auf meine Textfelder wirkt:

Richtet UI:

self.passwordTextField.delegate = self 
passwordTextField.layer.borderWidth = 1 
passwordTextField.layer.cornerRadius = 5 
passwordTextField.layer.borderColor = UIColor.lightGray.cgColor 
passwordTextField.returnKeyType = .done 

Adds Beobachter:

usernameTextField.addTarget(self, action: #selector(self.textFieldDidChange), for: .editingChanged) 
passwordTextField.addTarget(self, action: #selector(self.textFieldDidChange), for: .editingChanged) 

Observer-Funktion:

func textFieldDidChange() { 
    if usernameTextField.text == "" || passwordTextField.text == "" { 
     loginButtonInactive() 
    } else { 
     loginButtonActive() 
    } 
} 

Login ändern Schaltflächenaufruf e:

func loginButtonActive() { 
    logInButton.isEnabled = true 
    logInButton.layer.borderWidth = 0 
    logInButton.backgroundColor = UIColor.blue.cgColor 
    logInButton.setTitleColor(UIColor.white, for: .normal) 
} 

func loginButtonInactive() { 
    logInButton.isEnabled = false 
    logInButton.layer.borderColor = UIColor.lightGray.cgColor 
    logInButton.layer.borderWidth = 1 
    logInButton.backgroundColor = UIColor.white 
    logInButton.setTitleColor(UIColor.lightGray, for: .normal) 
} 
+0

Hmm dies klingt vertraut, für mich hatte ich nur Probleme auf dem Simulator, es nicht vollständig eingefroren, aber der Simulator war extrem langsam auf einen Textfeld Fokus. Aber es lief perfekt auf dem Gerät. Wie funktioniert es kein Gerät vs Simulator? – Sajjon

+0

Das Verhalten ist im Simulator und auf dem Gerät gleich. Ein vollständiger Einfrieren. – m1234

+0

können Sie einen Code schreiben? :) – Sajjon

Antwort

0

Ich habe das herausgefunden. Es hatte damit diese Funktion zu tun:

func textFieldDidChange() { 
    if usernameTextField.text == "" || passwordTextField.text == "" { 
     loginButtonInactive() 
    } else { 
     loginButtonActive() 
    } 
} 

Ich änderte es dazu:

func textFieldDidChange() { 
    if (usernameTextField.text?.characters.count == 0) || (passwordTextField.text?.characters.count == 0) { 
     loginButtonInactive() 
    } else { 
     loginButtonActive() 
    } 
} 

Ich bin nicht sicher, warum die erste Funktion verursachte das Problem, wie es in früheren Projekten fein gearbeitet, aber die neuen Funktion funktioniert gut und behoben das Problem!

Verwandte Themen