Fokussieren eines Textfelds in swift
Habe ich 4 Textfelder in einem register Bildschirm und ich haben es so eingerichtet, dass, wenn der Benutzer drückt weiter auf jedes Textfeld, der nächste text-Feld ausgerichtet ist. Code unter:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if (textField == self.fNameField) {
textField.resignFirstResponder()
self.sNameField.becomeFirstResponder()
}
else if (textField == self.sNameField) {
self.emailField.becomeFirstResponder()
} else if (textField == self.emailField) {
self.passwordField.becomeFirstResponder()
}
else{
var thereWereErrors = checkForErrors()
if !thereWereErrors
{
//conditionally segue to next screen
}
}
return true
}
Auf die Rückkehr der letzten text-Feld, ich fordere eine überprüfung auf Fehler-Funktion (unten). Innerhalb, dass, wenn es ein Problem mit jedem Feld, das ich an fokussieren möchten, das text-Feld, so kann der Benutzer leicht korrigieren. Was geschieht, ist, dass das Feld mit dem Fehler der Fokussierung (als beauftragt durch die checkForErrors Funktionen)für eine Sekunde, aber dann liegt der Fokus der Umstellung wieder auf das Textfeld Kennwort. Ich habe auch versucht, indem in self.passwordField.resignFirstResponder()
in den letzten anderes der oben genannten Funktion und das macht das Passwort-Eingabefeld den Fokus verliert aber dann das Textfeld mit dem Problem, das Auftritt, ist nicht zu gewinnen Fokus auf alle (nicht einmal für eine Sekunde so vor), Wie kann ich dieses Problem beheben?
func checkForErrors() -> Bool
{
var errors = false
let title = "Error"
var message = ""
if fNameField.text.isEmpty {
errors = true
message += "First name empty"
alertWithTitle(title, message: message, ViewController: self)
self.fNameField.becomeFirstResponder()
}
else if sNameField.text.isEmpty
{
errors = true
message += "Surname empty"
alertWithTitle(title, message: message, ViewController: self)
self.sNameField.becomeFirstResponder()
}
else if emailField.text.isEmpty
{
errors = true
message += "Email empty"
alertWithTitle(title, message: message, ViewController: self)
self.emailField.becomeFirstResponder()
}
else if !isValidEmail(emailField.text)
{
errors = true
message += "Invalid Email Address"
alertWithTitle(title, message: message, ViewController: self)
self.emailField.becomeFirstResponder()
}
else if passwordField.text.isEmpty
{
errors = true
message += "Password empty"
alertWithTitle(title, message: message, ViewController: self)
self.passwordField.becomeFirstResponder()
}
else if count(passwordField.text.utf16)<8
{
errors = true
message += "Password must be at least 8 characters"
alertWithTitle(title, message: message, ViewController: self)
self.passwordField.becomeFirstResponder()
}
return errors
}
Hinweis: ich habe die textField-Objekt delegieren.
alert mit Titel, Funktion wie gewünscht:
func alertWithTitle(title: String!, #message: String, #ViewController: UIViewController) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .Alert)
let action = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
alert.addAction(action)
ViewController.presentViewController(alert, animated: true, completion: nil)
}
InformationsquelleAutor der Frage user2363025 | 2015-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese funktioniert bei mir:
InformationsquelleAutor der Antwort Juan Carlos Ospina Gonzalez
theTextFieldYouWant.becomeFirstResponder()
InformationsquelleAutor der Antwort user23