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.
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 versuchenInformationsquelleAutor senty | 2016-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie ändern die Werte, die Sie anzeigen möchten, sollte die Rückkehr
false
nach dem ersetzen des Textes. Hier ist ein Beispiel:Müssen Sie implementieren Ihre eigenen isCorrectFormat() und callYourFormatMethodHere().
Edit:
Verwenden Sie den code:
PartialFormatter().formatPartial(candidateString as String)
. Was bedeutet es eigentlich? Ich möchte hinzufügen eines Präfix'+' sign
am Anfang, dass kann nicht gelöscht werden; und formatieren Sie den text als Telefonnummer-format (mit der PhoneNumberKit sah bequem zu mir)Sehen, die aktualisiert wird, müssen Sie ersetzen die isCorrectFormat() und callYourFormatMethodHere() zu verkaufen.
Ich konnte nicht vollständig verstehen, Ihren Ansatz und auch verwirrt, es umzusetzen, zu testen, was es tut, als Kandidat.isCorrectFormat() nicht lass es mich tun. Aber aus der print line, ich kann sagen, dass es für die Erkennung der Zeichen+, - und für verhindern, dass es zu bekommen, gelöscht; Liege ich damit richtig oder völlig aus der Spur? Also, was ich tun müssen, ist zu erkennen, wenn die gedrückte Taste eine Zahl (nicht die " + "- Zeichen), und dementsprechend zu handeln, wie anfügen", um die textField. Ist das richtig?
Ich weiß nicht, warum Sie das nicht verstehen, ich dachte, es ist ganz klar, siehe die bearbeitet.
In der Realität, die UX sollte mehr erschweren. Sie wollen nicht nur die Konvertierung, wenn der Benutzer fertig mit der Eingabe. Sie wollen kontrollieren-format, während die Nutzung ist die Eingabe. z.B. Fügen Sie ein "+" ist der Benutzer nicht geben Sie " + " oder erlauben nur Zahlen. Das ist, warum ich sagte, Sie benötigen, um Ihre eigenen isCorrectFormat.
InformationsquelleAutor dichen