Die maximale Zeichen-Länge eines UITextField
Wie kann ich die maximale Anzahl der Zeichen in einer UITextField
auf dem iPhone-SDK, wenn ich laden, bis eine UIView
?
dieses unglaublich alte Antwort ist sehr veraltet - die Antwort ist nun trivial: stackoverflow.com/a/38306929/294884
Möglich, Duplikat der die maximale Zeichen-Länge eines UITextField in Swift
Möglich, Duplikat der die maximale Zeichen-Länge eines UITextField in Swift
InformationsquelleAutor Domness | 2009-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während der
UITextField
Klasse hat keine max length-Eigenschaft ist, ist es relativ einfach, diese Funktionalität durch die Einstellung des text-Feldesdelegate
und der Umsetzung der folgenden Delegierten-Methode:Objective-C
Swift
Vor dem text-Feld ändert sich, das UITextField-fragt die Delegierten, ob der angegebene text sollte geändert werden. Das Textfeld hat sich nicht geändert an diesem Punkt, so dass wir es packen die aktuelle Länge und die Länge der Zeichenfolge sind wir einfügen (entweder durch einfügen von kopierten text oder die Eingabe eines einzelnen Zeichens mittels der Tastatur), abzüglich der Auswahl der Länge. Wenn dieser Wert zu lange (mehr als 25 Zeichen in diesem Beispiel), zurück
NO
zu verbieten, das zu ändern.Wenn die Eingabe in ein einzelnes Zeichen am Ende eines Textfelds, das
range.location
wird das aktuelle Feld der Länge, undrange.length
wird 0 sein, da wir nicht ersetzen/löschen nichts. Einfügen in der Mitte ein text-Feld bedeutet nur, eine andererange.location
und einfügen mehrerer Zeichen bedeutet nurstring
hat mehr als einen Charakter in ihm.Löschen einzelner Zeichen oder schneiden mehrere Zeichen angegeben, die von einem
range
mit einer nicht-null-Länge, und eine leere Zeichenfolge. Ersatz ist nur einer Palette löschen mit einem nicht-leeren string.Ein Hinweis auf den Absturz "undo" - Fehler
Wie erwähnt in den Kommentaren, es ist ein Fehler mit der
UITextField
kann zu einem Absturz führen.Wenn Sie fügen Sie in das Feld, aber das einfügen wird verhindert, indem Ihre Validierung Implementierung der einfügeoperation wird noch aufgenommen in die Anwendung der undo-Puffer. Wenn Sie dann Feuer ein rückgängig machen (durch schütteln des Geräts und zur Bestätigung einer Undo), die
UITextField
versuchen wird, ersetzen Sie die Zeichenfolge es denkt es eingefügt, um sich mit einem leeren string. Dies wird Abstürzen, weil es nie eigentlich eingefügt die saite in sich. Es wird versuchen, ersetzt einen Teil des Strings, der nicht existiert.Glücklicherweise können Sie schützen die
UITextField
von der Tötung selbst, wie diesem. Sie müssen nur sicherstellen, dass Sie das Angebot schlägt Sie zu ersetzen hat, existieren in Ihrer aktuellen Zeichenfolge. Dies ist, was die anfängliche sanity-check oben hat.swift 3.0 mit kopieren und einfügen funktioniert Prima.
Hoffe, es ist hilfreich für Sie.
Gute Antwort, aber der ternäre operator ist überflüssig; Sie könnte nur setzen
return newLength <= 25;
Was ist, wenn Sie nur wollen, dass der text nicht verschütten über den Rahmen des textfield; nicht alle Zeichen die gleiche Breite, richtig ?
Es ist wirklich eine undo-Fehler, wie @bcherry erwähnt – getestet mit
UITextField
auf dem iPad mit iOS 8.1. (+1, Kommentar). Würde der Autor noch etwas über, wie es die am besten bewerteten Antwort? Ich bin glücklich, ein Bearbeiten, aber mir regelmäßig scheine zu bekommen, abgelehnt! 🙂In Swift, der check für die rückgängig-Fall scheint zu brechen, die die Eingabe emoji. Sollte nicht das zählen(textField.text) tatsächlich count(textField.text.utf16) passend zu den objc/uikit Berichterstattung in range (vs Swift-Variante des count on strings)?
InformationsquelleAutor sickp
Danke august! (Post)
Dies ist der code, den ich am Ende mit was funktioniert:
Was ist mit Menschen mit einer if-Anweisung return-NEIN oder JA? Versuchen Sie diese: zurück !(textField.text.Länge >= MAX_LENGTH && Bereich.Länge == 0);
oder diese
return textField.text.length < MAX_LENGTH || range.length != 0;
InformationsquelleAutor Domness
Swift 4
Edit: Problem mit dem Speicherverlust behoben.
Nicht diese Globale variable erstellen, Speicherlecks, indem Sie Verweise auf alle textviews (die Referenz des superviews bis root-)
Ich habe Sie bearbeitet, um zu beheben das Problem mit dem Speicherverlust Sie wies darauf hin, + swift 3. Dank
der schönste Weg zu erreichen ! Dank
wer kann mir seine Objektive version
InformationsquelleAutor frouo
Abgeschlossen August Antwort, eine mögliche Umsetzung der vorgeschlagenen Funktion (siehe UITextField ' s delegieren).
Habe ich nicht getestet, domness code, aber mir tun nicht stecken, wenn der Nutzer die Grenze erreicht, und es ist kompatibel mit einer neuen Zeichenfolge ersetzen, die kleiner oder gleich eins.
InformationsquelleAutor Jmini
Können Sie dies nicht direkt -
UITextField
hat keine maxLength - Attribut, aber Sie können dieUITextField's
delegieren, dann verwenden:es ist kein hack: es ist ein Beispiel, wo Sie tun müssen, grundlegende framework-code, dass Apple sollte für dich getan habe. Es gibt viele, VIELE Beispiele dafür in das iOS SDK.
InformationsquelleAutor August
Oft haben Sie mehrere input-Felder mit unterschiedlicher Länge.
InformationsquelleAutor Vincent
Ist der beste Weg, um set-up eine Benachrichtigung über den text ändern. In Ihrem
-awakeFromNib
Ihrer view-controller-Methode Sie wollen:Dann in der gleichen Klasse hinzufügen:
Verknüpfen Sie dann die Steckdose
myTextField
zu IhremUITextField
und wird es nicht lassen Sie, fügen Sie mehr Zeichen, nachdem Sie auf die Grenze. Werden Sie sicher, dass Sie diese zu Ihrem dealloc-Methode hinzu:Zwar habe ich diese zu löschen, Fehler > myTextField.text=[myTextField.text substringToIndex:limit];
InformationsquelleAutor Martin Pilkington
Ich erstellt diese UITextFieldLimit Unterklasse:
Greifen die
UITextFieldLimit.h
undUITextFieldLimit.m
aus diesem GitHub-repository:https://github.com/JonathanGurebo/UITextFieldLimit
beginnen und zu testen!
Markieren Sie Ihre storyboard erstellt, UITextField und einen link auf meine Unterklasse mit den Identity-Inspektor:
Dann können Sie einen link auf ein IBOutlet, und legen Sie die Grenze(Standardwert ist 10).
Ihre ViewController.h-Datei sollte enthalten: (wenn Sie wan ' T, um ändern Sie die Einstellung, wie die Grenze)
Ihre ViewController.m-Datei sollte
@synthesize textFieldLimit
.Legen Sie die text-Länge beschränken, die in Ihre ViewController.m-Datei:
Hoffe die Klasse hilft dir. Viel Glück!
Hängt davon ab, was Sie brauchen, Ihr limit für.... Aber ja Ihr habt Recht.
Noch Aufwand geschätzt.
InformationsquelleAutor Jonathan Gurebo
Dies sollte ausreichen, um das problem zu lösen (ersetzen Sie 4 durch die Grenze u wollen). So stellen Sie sicher, hinzufügen Delegierter in der IB.
InformationsquelleAutor Nishant
Ich simulieren die tatsächliche Zeichenfolge-Ersatz-das ist zu geschehen, zu berechnen, die Zukunft string-Länge:
InformationsquelleAutor samvermette
Swift 3-version
//***** Dieses funktioniert NICHT mit dem Swift 2.x! *****//
Erstellen Sie zunächst ein neues Swift-Datei : TextFieldMaxLength.swift,
und dann fügen Sie den folgenden code:
dann sehen Sie im Storyboard einen neuen Bereich (Max Länge) wenn Sie eines TextField -
wenn Sie noch weitere Fragen haben, schauen Sie sich diesen link: http://www.globalnerdy.com/2016/05/18/ios-programming-trick-how-to-use-xcode-to-set-a-text-fields-maximum-length-visual-studio-style/
InformationsquelleAutor Gilad Brunfman
Verwendung von Interface builder können Sie link und Holen Sie sich die Veranstaltung für die "Bearbeitung verändert" in Ihrer Funktion.
Es gibt jetzt Sie können überprüfen für die Länge
InformationsquelleAutor Vishal Kumar
Den folgenden code ähnelt sickp die Antwort, sondern die richtig copy-paste-Operationen. Wenn Sie versuchen, fügen Sie einen text, der länger ist als der Grenzwert, wird der folgende code schneidet den text zu passen, die Grenze anstelle der Verweigerung der Einfügevorgang vollständig.
InformationsquelleAutor wroluk
Machen, damit es funktioniert mit cut & paste von strings beliebiger Länge, würde ich vorschlagen, ändern die Funktion etwas wie:
InformationsquelleAutor Påhl Melin
Es ist generische Lösung zur Einstellung maximale Länge in Swift.
Durch IBInspectable können Sie neue Attribut im Attribute Inspector Xcode.
Saubere und perfekte Lösung
Holding ein UITextField in einem globalen Feld behalten Sie im Gedächtnis, auch nach dem UIViewController wird abgewiesen. Dies ist ein memory-leak. Verwenden Sie nicht diese Methode.
InformationsquelleAutor Hiren
Swift 2.0 +
Zunächst erstellen Sie eine Klasse für diesen Prozess. Können nennen es StringValidator.swift.
Dann fügen Sie den folgenden code in es.
Nun speichern Sie die Klasse.....
Nutzung..
Nun gehe viewController.swift Klasse und machen Sie Ihre textfield - outlets..
Nun springen die textfield - shouldChangeCharactersInRange Methode und verwenden, wie die folgenden.
Vergessen Sie nicht die delegate-Protokoll/Methoden von Textfeldern.
Lassen Sie mich erklären, was es ist... ich bin mit der einfachen Erweiterung Prozess der Zeichenfolge, die ich schrieb, die innerhalb einer anderen Klasse. Jetzt bin ich gerade nannte die Erweiterung Methoden aus einer anderen Klasse, wo ich Sie brauche, durch hinzufügen von check-und maximum-Wert.
Features...
Typen...
containsOnlyCharactersIn //Akzeptiert nur Buchstaben.
containsCharactersIn //Akzeptiert eine Kombination von Zeichen
doesNotContainsCharactersIn //Wird nicht akzeptieren, Zeichen
Hoffe, dass dies geholfen....
Danke..
InformationsquelleAutor onCompletion
swift 3.0
Dieser code funktioniert, wenn Sie einfügen string mehr als Ihren Charakter Grenzen.
Dank für Eure Stimmen. 🙂
InformationsquelleAutor Ilesh
Gebe ich eine Ergänzende Antwort auf @Frouo. Ich denke seine Antwort ist die schönste Art und Weise. Weil es eine gemeinsame Kontrolle, die wir wiederverwenden können.
InformationsquelleAutor Victor Choy
Swift 4
guard
?überprüfen Sie, ob der text null ist, wenn Sie möchten, können Sie auch verwenden, wenn die @oddRaven
InformationsquelleAutor Shan Ye
Unter Erweiterung um die maximale Zeichen-Länge eines
UITextField
undUITextView
.Swift 4.0
Können Sie festlegen, begrenzen unten.
Wirklich großartige Lösung für textfield und textview control character input limit. Speichern Ihre code-Zeilen und die Zeit auch für Entwickler ...:)
InformationsquelleAutor iMHitesh Surani
Dies ist der richtige Umgang mit max Länge auf UITextField, erlaubt Sie die return-Taste verlassen Sie das zurücktreten der textfield-als first responder und ermöglicht dem Benutzer die Rücktaste, wenn Sie an die Grenze
InformationsquelleAutor anders
Für Xamarin:
InformationsquelleAutor Kedu
Anderen Antworten nicht den Fall behandeln, wo Benutzer können fügen Sie eine lange Zeichenfolge aus der Zwischenablage. Wenn ich einfügen eine lange Zeichenfolge sollte es einfach abgeschnitten werden, sondern gezeigt.
Verwenden Sie diese in Ihrem delegieren:
InformationsquelleAutor 8suhas
Haben es bis auf 1 Linie des Codes 🙂
Legen Sie Ihre text-anzeigen, die Delegierten des "selbst", dann fügen Sie die
<UITextViewDelegate>
in Ihr .h und den folgenden code in Ihre .m..... Sie können die Zahl "7" sein, was immer Sie möchten, dass Ihre MAXIMALE Anzahl von Zeichen sein.Dieser code-Konten für die Eingabe von neuen Zeichen, löschen von Zeichen wenn Sie Zeichen auswählen, dann Eingabe oder löschen, wenn Sie Zeichen auswählen und Ausschneiden, einfügen im Allgemeinen, und wenn Sie Zeichen auswählen und einfügen.
Getan!
Alternativ eine andere Coole Art zu schreiben, dieser code mit bit-Operationen wäre
InformationsquelleAutor Albert Renshaw
Habe ich open Source ein UITextField-Unterklasse, STATextField, das bietet diese Funktionen (und vieles mehr) mit seinen
maxCharacterLength
Eigenschaft.InformationsquelleAutor Stunner
nun, wie viele Zeichen u wollen, geben nur Werte
InformationsquelleAutor mahesh chowdary
Verwenden Sie diesen code hier RESTRICTED_LENGTH ist die Länge, die Sie möchten zu beschränken, für textfield.
InformationsquelleAutor Amit Shelgaonkar
Habe ich diese in Swift für ein 8-Zeichen-Beschränkung bei der Verwendung einer Anzahl pad.
Ich hatte Sie zum testen der string != "" erlauben Sie die Schaltfläche löschen, um die Arbeit auf dem Ziffernblock, sonst wäre es ja nicht zulassen löschen von Zeichen in das Textfeld ein, nachdem es erreicht seine max.
InformationsquelleAutor u84six
Implementierte ich ein UITextField-Erweiterung hinzufügen, um eine maxLength-Eigenschaft.
Es basiert auf Xcode 6 IBInspectables, so können Sie den maxLength-Grenzwert auf dem Interface builder.
Hier ist die Umsetzung:
InformationsquelleAutor Lefteris
Wenn Ihr Ziel der Begrenzung der Zählung text ist, um sicherzustellen, dass der text passt in ein UILabel anderswo, ich möchte vermeiden, mit Zeichen zählen. Es bricht mit einigen emoji (der Versuch abschneiden, ein Doppel-size-emoji wird wahrscheinlich zu einem Absturz Ihrer app). Es ist auch ein Problem mit einigen Sprachen wie Japanisch und Chinesisch, die haben eine zwei-Schritt-input-Verfahren, wo eine einfache Zählung will einfach nicht funktionieren.
Baute ich aus einem UITextField-drop-in-Unterklasse (MPC_CharacterLimitedTextField auf github). Sie füttern die erwartete Ausgabe label Breite und es werden alle Sprachen, emoji, und einfügen Probleme. Es wird ernten Sie nur so viele volle Zeichen, die passen in das Etikett, unabhängig von der Anzahl der Zeichen. Es gibt eine demo im Projekt, so können Sie es testen, um zu sehen, ob es ist, was Sie brauchen. Hoffe, es wird helfen, wer hatte die gleichen Probleme mit ausgabelänge, dass ich war.
InformationsquelleAutor Mike Critchley