Formatierung UITextField text als Telefonnummer als Nutzer-Typen in

Habe ich eine custom-UITextField, das ich versuche zu 'format die Eingabe der Telefonnummer" als Benutzer-Typen. Was ich erreichen will:

  • Hinzufügen eines Präfix + Zeichen auf die UITextField-als erstes Zeichen, das nicht gelöscht werden kann.
  • Format sowohl die String-variable und UITextField-text in das format der Telefonnummer schön (+49 291 12345678), eher als nüchterne zahlen (4929112345678) als Benutzer eingibt.

Recherchierte ich und fand heraus, dass es keine eingebaute Methode. Ich habe auch festgestellt, easy-to-use-Bibliothek namens PhoneNumberKit für die Formatierung der Eingabe-String, Handy-Nummer. Spielplatz, es funktioniert wie..

let rawNumberArray = "+4929112345678"
let phoneNumbers = PartialFormatter().formatPartial(rawNumberArray)

print(phoneNumbers) // "+49 291 12345678"

Im Hinterkopf kahl, dass, muss die Bibliothek String zu haben + als erstes Zeichen, um zu formatieren, richtig.


Ich habe versucht, es umzusetzen auf meine UITextField.

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
    if textField == myTextField {
        let candidateString : NSString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
        let updatedTextString : NSString = PartialFormatter().formatPartial(candidateString as String)

        self.formattedPhoneNumber(updatedTextString, textField: textField)
    }
    return true
}

func formattedPhoneNumber(updatedTextString: NSString, textField: UITextField) {
    // textField.text = "+\(updatedTextString as String)"
    print(updatedTextString)
}

Wenn ich immer textField.text = "+\(updatedTextString as String)" kommentiert print(updatedTextString) druckt schön formatierten String auf der Konsole, SONDERN im inneren UITextField auf UI, es zeigt nur, einfachen, unstrukturierten Nummern wie "4929112345678"

Wenn ich kommentieren Sie es, beginnen die Dinge seltsam und UITextField startet vorliegenden duplizierten Zeichen in der Benutzeroberfläche, aber Konsole für print bekommt auch ziemlich seltsam. Ich habe auch versucht, die Entleerung textField.text = "" vor, aber hat nicht funktioniert.


Was mache ich falsch? Das, was ich bin fehlt, die nicht zulassen, wird es funktionieren? Ich glaube, es ist verwandt mit mir und nicht der Bibliothek selbst.

Auch, wenn du irgendwelche anderen Vorschläge hast (oder Bibliotheken) für mich um dieses problem zu überwinden, bitte teilen Sie Sie.

Wenn Sie zum aktualisieren des text Felds text über die shouldChangeCharactersInRange - Funktion, müssen Sie zurück false aus shouldChangeCharactersInRange.
Ich habe versucht, die änderung der return true zu return false. Mit textField.text = "+\(updatedTextString as String)" leider fügt + Zeichen jedes mal, wenn ich Sie auf 'Löschen'. Es ist ein Logik-Fehler in meinem Ansatz, aber ich konnte nicht es herausfinden. Ich würde dankbar sein, wenn Sie hinzufügen können, eine Antwort, so kann ich es versuchen

InformationsquelleAutor senty | 2016-03-16

Schreibe einen Kommentar