Ich wollte einen benutzerdefinierten Hintergrund für meine verwenden UITextFields
. Dies funktioniert gut, bis auf die Tatsache, dass ich es verwenden muss UITextBorderStyleNone
, damit es hübsch aussieht. Dadurch wird der Text gezwungen, ohne Auffüllung links zu bleiben.
Kann ich eine Auffüllung manuell so einstellen, dass sie ähnlich aussieht, UITextBorderStyleRoundedRect
außer dass mein benutzerdefiniertes Hintergrundbild verwendet wird?
quelle
*paddingView
mit mehreren Textfeldern wiederverwendete ?Ich habe diese Kategorieimplementierung erstellt und oben in der
.m
Datei hinzugefügt .Basierend auf dem Link, den Piotr Blasiak zur Verfügung gestellt hat. Es schien einfacher zu sein, als eine ganz neue Unterklasse zu erstellen, und auch einfacher, die zusätzliche hinzuzufügen
UIView
. Es scheint jedoch, dass etwas fehlt, um die Auffüllung in einem Textfeld nicht steuern zu können.Swift 4-Lösung:
quelle
Eine Swift 3-Version für Xcode> 6, in der Sie den Einfügungswert in Interface Builder / Storyboard bearbeiten können.
quelle
override func placeholderRectForBounds(bounds: CGRect) -> CGRect { return CGRectInset(bounds, inset, inset) }
@IBDesignable
und was zu@IBInspectable
tun ist, dh dieser Beitrag bei nshipsterreturn super.textRectForBounds(CGRectInset(bounds, inset, inset))
wird der Versatz zu den Zubehöransichten ordnungsgemäß behandelt.Bearbeiten: Funktioniert immer noch in iOS 11.3.1
In iOS 6
myTextField.leftView = paddingView;
verursacht das ProblemDies löst das Problem
Für rechtsbündiges Textfeld verwenden Sie,
CATransform3DMakeTranslation(-5, 0, 0)
wie vom Latenitcodierer in Kommentaren erwähntquelle
Ein guter Ansatz zum Hinzufügen von Auffüllungen zu UITextField besteht darin, eine edgeInsets-Eigenschaft zu unterordnen und hinzuzufügen. Anschließend legen Sie die edgeInsets fest und das UITextField wird entsprechend gezeichnet. Dies funktioniert auch korrekt mit einem benutzerdefinierten leftView- oder rightView-Set.
OSTextField.h
OSTextField.m
quelle
Unterklasse UITextField einfach wie folgt:
Dies fügt eine horizontale Polsterung von 10 Punkten auf beiden Seiten hinzu.
quelle
Ziel C-Code
MyTextField.h
MyTextField.m
quelle
Legen Sie fest, dass Ihre Textfeldklasse PaddingTextField ist, und passen Sie das Auffüllen nach Ihren Wünschen an
Geniesse es
quelle
Basierend auf der Antwort von Evil Trout möchten Sie möglicherweise eine Kategorie erstellen, um die Verwendung in mehreren Anwendungen zu vereinfachen.
Header-Datei:
Implementierungsdatei:
Anwendungsbeispiel
Hoffe es hilft euch Jungs
Prost
quelle
Schnelle Version:
Damit Sie in IB Wert zuweisen können
quelle
IBInspectable
Mit dieser Option können Sie den Setter-Code zur Laufzeit anwenden. Geben Sie einfach Ihre Nummer einInterface Builder
und es wird funktionieren.Clear Button
. Ihre Schaltfläche zum Löschen wird nicht angezeigt, wenn Sie diese Lösung anwenden.Sie können die Polsterung nicht einstellen. Haben Sie stattdessen ein,
UIView
das Ihr Hintergrundbild und dasUITextField
Innere davon hat. Stellen Sie dieUITextField
BreiteUIViewWidth-(paddingSize x 2)
und Höhe ähnlich ein und stellen Sie sie dann auf Punkt einpaddingSize,paddingSize
.quelle
Unterklasse UITextField einfach so ( Swift-Version ):
Dies fügt eine horizontale Polsterung von 25,0 Punkten auf beiden Seiten hinzu.
quelle
Ich habe mich auf die Lösung von Nate gestützt, aber dann habe ich festgestellt, dass dies Probleme verursacht, wenn Sie die Eigenschaften leftView / rightView verwenden. Daher ist es besser, die Implementierung des Super zu optimieren, da die Ansichten links / rechts berücksichtigt werden.
quelle
Aktualisierte Version für Swift 3:
quelle
Legen Sie die Auffüllung für UITextField mit UITextBorderStyleNone: Swift fest
Basierend auf der am häufigsten gewählten Antwort von @Evil Trout habe ich in meiner ViewController-Klasse eine benutzerdefinierte Methode erstellt, wie unten gezeigt:
Jetzt kann ich diese Methode im Inneren aufrufen (viewDidLoad-Methode) und alle meine TextFields an diese Methode senden und sowohl rechts als auch links Auffüllungen hinzufügen sowie Text- und Hintergrundfarben angeben, indem ich nur eine Codezeile wie folgt schreibe:
Dies funktionierte perfekt unter iOS 7! Ich weiß, dass das Hinzufügen zu vieler Ansichten dazu führen kann, dass diese Klasse etwas schwerer geladen werden kann. Als ich mir jedoch Sorgen über die Schwierigkeiten bei anderen Lösungen machte, war ich voreingenommener gegenüber dieser Methode und flexibler bei der Verwendung dieser Methode. ;)
Danke für den Hack "Evil Trout"! (Bogen)
Ich dachte, ich sollte das Code-Snippet dieser Antwort mit Swift aktualisieren:
Da wir mit Swift Erweiterungen für die vorhandenen Klassen schreiben können, schreiben wir es auf diese Weise.
Verwendungszweck:
Hoffe, das wäre hilfreich für jemand anderen da draußen!
Prost!
quelle
So erreichen Sie dies in SWIFT
Ressource
quelle
Swift 2.0 Version:
quelle
^ Diese Vorschläge sind ideal für diejenigen, die programmgesteuert eine Schnittstelle erstellen.
Es gibt jedoch zwei LAZY EASY WAYS für diejenigen von uns, die den Xcode Interface Builder verwenden:
einfacher: Platzieren Sie eine UIImageView hinter einem Textfeld
Am einfachsten: Ändern Sie den Rahmenstil auf dem einfachen schwarzen Quadrat (zweite von links) und fügen Sie dann Ihr Bild als Hintergrundbild hinzu. Das Bild hat Vorrang vor dem Quadrat, sodass Sie immer noch die für einen normalen Bildhintergrund erforderliche Auffüllung erhalten, ohne dass das Quadrat tatsächlich gezeichnet wird.
BEARBEITEN: Sie können auch die schwarze Kugel verwenden (dritte von links, wenn Sie die UITextBox in IB auswählen). Sie funktioniert nicht mit dem ganz rechten "grafischen Kugel" -Stil.
quelle
Wenn jemand nach einer
Swift 4.0
Version sucht, dann ist untenextension
Arbeit. Es hat beidesLeft
undRight
Polsterung fürUITextField
. Eigentlich ist esIBInspectable
für die Storyboard-Konfiguration. Sie können den Wert direkt im Interface Builder / Storyboard festlegen. Dies ist getesteter Code in Swift 4.0 und Xcode 9.0Beachten Sie, dass Sie Right Padding leer lassen müssen , wenn Sie
Clear Button
dasselbe aktivieren möchtenUITextField
.quelle
Der beste Weg, dies zu tun, besteht darin, einfach eine Klasse mit der Unterklasse von UITextField und in der .m-Datei zu erstellen
Gehen Sie dazu zu Ihrem Storyboard oder xib und klicken Sie auf Identity Inspector und ersetzen Sie UITextfield durch Ihre eigene Option "CustomTextField" in der Klasse.
Hinweis: Wenn Sie einfach ein Auffüllen mit automatischem Layout für das Textfeld angeben, wird Ihre Anwendung nicht ausgeführt und zeigt nur einen leeren Bildschirm an.
quelle
Swift 3 Version:
quelle
Die Antwort von Nate Flink ist meine Lieblingsantwort, aber vergessen Sie nicht die Ansichten rechts / links. ZB für
UITextField
Unterklasse:Oben Code richtig auffüllen für
rightView
vonUITextField
.quelle
Swift 3-Lösung
quelle
Hier ist ein Swift-Code zum Auffüllen in UITextfield
und mit anrufen
quelle
Sie können Kategorie verwenden. Stellen Sie die Polsterung auf links und rechts
UITextField + Padding.h
UITextField + Padding.m
Sie können das Auffüllen wie folgt einstellen. self.phoneNumTF.paddingValue = 10.f; oder self.phoneNumTF.leftPadding = 10.f;
quelle
@ Evil Forelle Antwort ist großartig. Ich benutze diesen Ansatz schon seit einiger Zeit. Es fehlt nur noch der "Umgang mit zahlreichen Textfeldern". Ich habe andere Ansätze ausprobiert, scheint aber nicht zu funktionieren.
Das Unterklassen von UITextField, nur um eine Polsterung hinzuzufügen, ergab für mich keinen Sinn. Also habe ich alle UITextFields durchlaufen, um die Auffüllung hinzuzufügen.
quelle
textfieldarray
es im zweitenif
Block nicht definiert ist , habe ich dieses Snippet (danke!) Mit Erfolg verwendet, nachdem ich den Inhalt des zweitenif
durchfor(id subSubView in [view subviews]){[self addPaddingToAllTextFields:subSubView];}
Brodys Lösung hat perfekt für mich funktioniert. Ich musste Seitenansichten zu einem Textfeld hinzufügen und zusätzliche Auffüllungen hinzufügen. Durch die Implementierung der benutzerdefinierten UIEdgeInsets-Eigenschaft in eine UITextField-Unterklasse ist es mir gelungen, die Aufgabe zu erfüllen. Ich werde diese neue Unterklasse in allen meinen Projekten verwenden.
quelle
Die beste Lösung, die ich bisher gefunden habe, ist eine Kategorie. So füge ich links und rechts eine 5-Punkte-Polsterung hinzu:
Die # Pragmas dienen nur zum Entfernen der nervigen Warnungen
quelle
wird Rand hinzufügen, der als Polsterung für mich arbeitete.
quelle
Eine weitere Überlegung ist, dass Sie, wenn Sie mehr als eine haben,
UITextField
in der Sie Auffüllungen hinzufügen,UIView
für jedes Textfeld eine eigene erstellen müssen, da diese nicht gemeinsam genutzt werden können.quelle