Je voulais utiliser un arrière-plan personnalisé pour mon UITextFields
. Cela fonctionne bien, sauf pour le fait que je dois l'utiliser UITextBorderStyleNone
pour le rendre joli. Cela force le texte à rester à gauche sans aucun remplissage.
Puis-je définir un remplissage manuellement afin qu'il ressemble à, UITextBorderStyleRoundedRect
sauf pour utiliser mon image d'arrière-plan personnalisée?
ios
uitextfield
padding
Sebastian Wramba
la source
la source
*paddingView
avec plusieurs champs de texte?J'ai créé cette implémentation de catégorie et l'ai ajoutée en haut du
.m
fichier.Basé sur le lien fourni par Piotr Blasiak. Il semblait plus simple que de créer une toute nouvelle sous-classe, et aussi plus simple que d'ajouter l'ajout
UIView
. Pourtant, il semble que quelque chose manque pour ne pas pouvoir contrôler le remplissage à l'intérieur d'un champ de texte.Solution Swift 4:
la source
Une version Swift 3 pour Xcode> 6, où vous pouvez modifier la valeur de l'encart dans Interface Builder / Storyboard.
la source
override func placeholderRectForBounds(bounds: CGRect) -> CGRect { return CGRectInset(bounds, inset, inset) }
@IBDesignable
et@IBInspectable
faire, c'est-à-dire ce poste à nshipsterreturn super.textRectForBounds(CGRectInset(bounds, inset, inset))
gérera correctement le décalage par rapport aux vues d'accessoires.Edit: fonctionne toujours dans iOS 11.3.1
Dans iOS 6
myTextField.leftView = paddingView;
est à l'origine du problèmeCela résout le problème
Pour l'utilisation du champ de texte aligné à droite
CATransform3DMakeTranslation(-5, 0, 0)
comme mentionné par latenitecoder dans les commentairesla source
Une bonne approche pour ajouter un remplissage à UITextField consiste à sous-classer et à ajouter une propriété edgeInsets. Vous définissez ensuite les edgeInsets et le UITextField sera dessiné en conséquence. Cela fonctionnera également correctement avec un ensemble leftView ou rightView personnalisé.
OSTextField.h
OSTextField.m
la source
Il suffit de sous-classer UITextField comme ceci:
Cela ajoute un rembourrage horizontal de 10 points de chaque côté.
la source
Code objectif C
MyTextField.h
MyTextField.m
la source
Définissez votre classe de champ de texte sur PaddingTextField et personnalisez votre remplissage à votre guise
Profitez-en
la source
Sur la base de la réponse d'Evil Trout, vous voudrez peut-être créer une catégorie pour la rendre plus facile à utiliser dans plusieurs applications.
En tête de fichier:
Fichier d'implémentation:
Exemple d'utilisation
J'espère que ça vous aide les gars
À votre santé
la source
Version Swift:
Pour que vous puissiez attribuer une valeur dans IB
la source
IBInspectable
vous permet d'appliquer le code setter lors de l'exécution, il vous suffit donc de saisir votre numéroInterface Builder
et cela fonctionnera.Clear Button
. Votre bouton clair ne sera pas visible si vous appliquez cette solution.Vous ne pouvez pas définir de rembourrage. Au lieu de cela, ayez un
UIView
qui a votre image de fond et l'UITextField
intérieur de celui-ci. Définissez laUITextField
largeur commeUIViewWidth-(paddingSize x 2)
et la hauteur de manière similaire, puis définissez-la au pointpaddingSize,paddingSize
.la source
Il suffit de sous- classer UITextField comme ceci ( version Swift ):
Cela ajoute un rembourrage horizontal de 25,0 points de chaque côté.
la source
J'étais basé sur la solution de Nate, mais j'ai trouvé que cela causait des problèmes lorsque vous utilisez les propriétés leftView / rightView, donc il vaut mieux régler l'implémentation du super, car il prendra en compte les vues gauche / droite.
la source
Version mise à jour pour Swift 3:
la source
Définir le remplissage pour UITextField avec UITextBorderStyleNone: Swift
Sur la base de la réponse la plus votée de @Evil Trout, j'ai créé une méthode personnalisée dans ma classe ViewController, comme indiqué ci-dessous:
Maintenant, je peux appeler cette méthode à l'intérieur (méthode viewDidLoad) et envoyer n'importe lequel de mes TextFields à cette méthode et ajouter un remplissage pour la droite et la gauche, et donner des couleurs de texte et d'arrière-plan en écrivant une seule ligne de code, comme suit:
Cela a parfaitement fonctionné sur iOS 7! Je sais que l'ajout de trop de vues pourrait rendre cette classe un peu plus lourde à charger. Mais soucieux de la difficulté des autres solutions, je me suis retrouvé plus partisan de cette méthode et plus flexible à utiliser de cette façon. ;)
Merci pour le Hack "Evil Trout"! (arc)
J'ai pensé que je devrais mettre à jour l'extrait de code de cette réponse avec Swift:
Puisque Swift nous permet d'écrire des extensions pour les classes existantes, écrivons-le de cette façon.
Usage:
J'espère que cela serait utile à quelqu'un d'autre!
À votre santé!
la source
Voici comment y parvenir dans SWIFT
Ressource
la source
Version Swift 2.0:
la source
^ ces suggestions sont idéales pour ceux qui créent une interface par programmation.
Mais il y a deux LAZY EASY WAYS pour ceux d'entre nous qui utilisent le constructeur d'interface Xcode:
plus facile: placez une UIImageView derrière un champ de texte
le plus simple: changez le style de bordure sur votre en un simple carré noir (deuxième option à partir de la gauche), puis ajoutez votre image comme image de fond. L'image est prioritaire sur le carré, vous obtenez donc toujours le remplissage nécessaire pour un arrière-plan d'image normal, sans que le carré soit réellement dessiné.
EDIT: vous pouvez également utiliser la sphère noire (troisième option en partant de la gauche lors de la sélection de l'UITextBox dans IB), elle ne fonctionne pas avec le style extrême "sphère graphique".
la source
Si quelqu'un est à la recherche d'une
Swift 4.0
version, leextension
travail est ci - dessous . Il a les deuxLeft
et unRight
rembourrage pourUITextField
. En fait, c'estIBInspectable
pour la configuration du storyboard. Vous pouvez définir la valeur directement depuis Interface Builder / Storyboard. Ce code est testé dans la version Swift 4.0 et Xcode 9.0Gardez à l'esprit que si vous souhaitez activer
Clear Button
la même chose,UITextField
vous devez garder le remplissage droit vide.la source
La meilleure façon de le faire est simplement de créer une classe en utilisant la sous-classe de UITextField et dans un fichier .m
en faisant cela, allez dans votre storyboard ou xib et cliquez sur l'inspecteur d'identité et remplacez UITextfield par votre propre option "CustomTextField" dans la classe.
Remarque: Si vous donnez simplement un remplissage avec une mise en page automatique pour le champ de texte, votre application ne s'exécutera pas et n'affichera qu'un écran vide.
la source
Version Swift 3:
la source
La réponse de Nate Flink est ma préférée, mais n'oubliez pas les vues droite / gauche. Par exemple, pour la
UITextField
sous-classe:Au-dessus du code, réglez le remplissage droit pour
rightView
ofUITextField
.la source
Solution Swift 3
la source
Voici un code Swift pour donner un remplissage dans UITextfield
et appeler en utilisant
la source
vous pouvez utiliser la catégorie. définir le rembourrage à gauche et à droite
UITextField + Padding.h
UITextField + Padding.m
vous pouvez définir un remplissage comme celui-ci self.phoneNumTF.paddingValue = 10.f; ou self.phoneNumTF.leftPadding = 10.f;
la source
La réponse de @Evil trout est excellente. J'utilise cette approche depuis un certain temps maintenant. La seule chose qui lui manque est "de traiter de nombreux champs de texte". J'ai essayé d'autres approches mais ne semble pas fonctionner.
Sous-classer UITextField juste pour ajouter un remplissage n'a pas de sens pour moi. J'ai donc itéré sur tous les UITextFields pour ajouter le remplissage.
la source
textfieldarray
n'est pas défini dans le deuxièmeif
bloc, j'ai utilisé cet extrait (merci!) Avec succès après avoir remplacé le contenu du secondif
parfor(id subSubView in [view subviews]){[self addPaddingToAllTextFields:subSubView];}
La solution de Brody a fonctionné parfaitement pour moi. J'ai dû ajouter des vues latérales sur un champ de texte et ajouter un remplissage supplémentaire. Donc, en implémentant la propriété UIEdgeInsets personnalisée dans une sous-classe UITextField, j'ai réussi à accomplir la tâche. Je vais utiliser cette nouvelle sous-classe dans tous mes projets.
la source
La meilleure solution que j'ai trouvée jusqu'à présent est une catégorie. Voilà comment j'ajoute un rembourrage de 5 points à gauche et à droite:
Les # pragma sont juste pour supprimer les avertissements gênants
la source
ajoutera une bordure, qui a fonctionné comme rembourrage pour moi.
la source
Une autre considération est que, si vous en avez plusieurs
UITextField
où vous ajoutez un remplissage, vous devez en créer un distinctUIView
pour chaque champ de texte, car ils ne peuvent pas être partagés.la source