2016-08-08 11 views
3

Um zu verhindern, dass der Benutzer mehr als eine Dezimalzahl in das Textfeld eingibt und den Benutzer daran hindert, alphabetische Zeichen in das Textfeld einzugeben, habe ich versucht Code unten. Das Problem ist, dass ich nicht weiß, wie man sie innerhalb der Funktion überprüft und zwei If-Anweisungen habe, was bedeutet, dass die zweite nicht ausgeführt wird, da sie nie ausgeführt wird. Wenn ich den Code nehme, der die Anzahl der Dezimalstellen überprüft und den Zeichenprüfungscode belässt, funktioniert das perfekt. Wie kann ich sie beide arbeiten lassen?Alphabetische Zeichen in einem Textfeld deaktivieren (Teil meines Codes wird nicht ausgeführt)

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

    let existingTextHasDecimalSeparator = textField.text?.rangeOfString(".") 
    let replacementTextHasDecimalSeparator = string.rangeOfString(".") 

    let charactersNotAllowed = NSCharacterSet.letterCharacterSet() 
    let replacementTextHasLetter = string.rangeOfCharacterFromSet(charactersNotAllowed) 

    if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil { 
     return false 
    } else { 
     return true 
    } 

    if replacementTextHasLetter != nil { 
     return false 
    } else { 
     return true 
    } 

} 

Antwort

1

Der Grund, warum Ihre Funktion nicht funktioniert, ist, dass sie ihre Entscheidung früh sowohl für den positiven als auch für den negativen Fall trifft.

Aufschieben true bis zum Ende der Funktion Rückkehr:

if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil { 
    // Do not allow multiple decimal separators 
    return false 
} 
if replacementTextHasLetter != nil { 
    // Do not allow letters 
    return false 
} 
return true 

Das das Alles-oder-nichts-Logik der Entscheidung widerspiegelt: alle Prüfungen, um alle Kontrollen erfolgreich sein müssen, während es nur nimmt man fehlgeschlagen, um die Änderung zu verwerfen.

+0

Scheint jetzt offensichtlich .. Danke für die Antwort! – Anonan

0

Könnte verbessert werden wie die oben, aber es ist wie ich meine App nicht mehrere Dezimalstellen und Zeichen zu ermöglichen. Es klappt.