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

Schreibe einen Kommentar