De padding pour objet UITextField avec UITextBorderStyleNone
Je voulais utiliser un arrière-plan personnalisé pour mon UITextFields
. Cela fonctionne bien, sauf pour le fait que je dois utiliser UITextBorderStyleNone
pour faire joli. Cela force le texte à coller à la gauche, sans rembourrage.
Puis-je configurer un rembourrage manuellement afin qu'il ressemble à UITextBorderStyleRoundedRect
sauf pour l'utilisation de mon image de fond personnalisée?
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé un joli petit hack pour définir la marge intérieure gauche pour cette situation exacte.
Fondamentalement, vous définissez la leftView propriété de la
UITextField
à vide du point de vue de la taille du matelas que vous voulez:A fonctionné comme un charme pour moi!
Dans Swift 3/Swift 4, il peut être fait en faisant cela
*paddingView
avec plusieurs champs de texte?UIView
réside le textfield ne devient pasfirstResponder
. Afin de contourner ce problème, une solution possible peut-être d'ajouter un geste de reconnaissance à la vue avecbecomeFirstResponder
que le sélecteur.J'ai créé cette catégorie de la mise en œuvre et de l'ajouter en haut de la
.m
fichier.Basé sur le lien Piotr Blasiak fourni. Il semble plus simple de créer une toute nouvelle sous-classe, et aussi plus simple d'ajouter la
UIView
. Pourtant, il semble qu'il manque quelque chose pour ne pas être en mesure de contrôler le rembourrage à l'intérieur d'un champ de texte.Swift 4 solution:
CGRectInset
dans ce cas ..?Une Swift 3 version de Xcode >6, où vous pouvez modifier l'encart de la valeur dans Interface Builder /Storyboard.
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))
va gérer le décalage de l'accessoire vues correctement.Une bonne approche pour ajouter rembourrage pour objet UITextField est à la sous-classe et ajouter un edgeInsets de la propriété. Vous définissez ensuite la edgeInsets et l'objet UITextField sera établi en conséquence. Ce sera aussi fonctionner correctement avec un custom leftView ou rightView ensemble.
OSTextField.h
OSTextField.m
Edit: Encore fonctionne sous iOS 11.3.1
Dans iOS 6
myTextField.leftView = paddingView;
est à l'origine de problèmeCela résout le problème
Pour aligné à droite du champ de texte utilisation
CATransform3DMakeTranslation(-5, 0, 0)
comme mentionner par latenitecoder dans les commentairesJuste sous-classe UITextField comme ceci:
Cela ajoute de rembourrage horizontal de 10 points de chaque côté.
Objectif De Code C
MyTextField.h
MyTextField.m
Basé sur le Mal de Truites de la réponse, vous pouvez vous voulez créer une catégorie pour le rendre plus facile à utiliser dans de multiples applications.
Fichier d'en-tête:
Mise en œuvre de fichier:
Exemple D'Utilisation
Espère que cela vous aide les gars
Acclamations
Ensemble de votre classe textfield est PaddingTextField et personnalisée de votre rembourrage que vous le souhaitez
Profiter
Swift version:
De sorte que vous pouvez affecter la valeur de l'IB
IBInspectable
vous permet d'appliquer le setter code au moment de l'exécution, de sorte suffit de mettre votre numéro deInterface Builder
et il va fonctionner.Clear Button
. Votre bouton sera pas visible si l'option appliquer cette solution.Vous ne pouvez pas définir de rembourrage. Au lieu d'avoir un
UIView
qui a votre image d'arrière-plan et laUITextField
à l'intérieur. Définir laUITextField
largeurUIViewWidth-(paddingSize x 2)
et la hauteur de la même façon et puis le mettre au pointpaddingSize,paddingSize
.J'étais basé sur Nate solution, mais ensuite, j'ai trouvé que cela pose des problèmes lorsque vous utilisez le leftView/rightView propriétés, de sorte que son meilleur régler la super mise en œuvre, car il faudra la vue gauche/droite du compte.
Juste sous-classe UITextField comme ceci (Swift version):
Cela ajoute de rembourrage horizontal de 25.0 points de chaque côté.
Voici comment réaliser cela dans SWIFT
Ressources
Swift Version 2.0:
^ ces suggestions sont parfaits pour ceux qui sont par programme la création d'une interface.
Mais il y a deux PARESSEUX MOYENS FACILES pour ceux d'entre nous qui utilisent le Xcode, interface builder:
plus facile: mettez une UIImageView derrière un champ de texte
plus simple: changer le style de bordure sur votre pour la simple carré noir (deuxième à partir de la gauche en option), puis d'ajouter votre image comme arrière-plan. L'image l'emporte sur le carré, de sorte que vous obtenez toujours le rembourrage nécessaire pour une normale de l'image d'arrière-plan, sans le carré fait d'être attirée sur.
EDIT: vous pouvez également utiliser la sphère noire (troisième à partir de la gauche de l'option lors de la sélection de la UITextBox IB), il ne fonctionne pas avec l'extrême droite, "graphique de la sphère de style.
La meilleure façon de le faire est de simplement faire une classe à l'aide de la sous-classe de l'objet UITextField et dans .m fichier
en faisant cela, allez à votre storyboard ou xib et cliquez sur l'identité de l'inspecteur et de remplacer UITextfield avec votre propre "CustomTextField" dans la classe option.
Remarque: Si vous donnez simplement rembourrage avec mise en page automatique pour textfield, alors votre demande ne sera pas exécuté et ne montrer que l'écran est vide.
Version mise à jour pour Swift 3:
De padding pour objet UITextField avec UITextBorderStyleNone: Swift
Basé sur @le Mal de Truites les plus voté réponse, j'ai créé une méthode personnalisée dans mon ViewController classe, comme indiqué ci-dessous:
Maintenant je peux appeler cette méthode à l'intérieur (méthode viewDidLoad) et de les envoyer l'un de mes objets textfield à cette méthode et ajouter rembourrage pour les deux de droite et de gauche, et de donner le texte et les couleurs d'arrière-plan par écrit une seule ligne de code, comme suit:
Cela a Fonctionné parfaitement sur iOS 7!
Je sais que l'ajout de trop de points de Vue pourrait les rendre un peu plus lourd de la classe à charger. Mais quand inquiète de la difficulté à d'autres solutions, je me suis retrouvé plus biaisée de cette méthode et plus souple avec l'aide de cette façon. 😉
Merci pour le Hack "Mal Truite"! (arc)
J'ai pensé que je devrais mettre à jour cette réponse de l'extrait de code avec Swift:
Depuis Swift nous permettre d'écrire des extensions pour les classes existantes, nous allons l'écrire de cette façon.
Utilisation:
Espère que cela serait utile à quelqu'un d'autre là-bas!
Cheers!
Swift 3 Solution
Swift 3 Version:
@Mal truites réponse est grande. J'ai été en utilisant cette approche pour un certain temps maintenant. La seule chose qui manque est "de traiter avec de nombreux champs de texte". J'ai essayé d'autres approches, mais ne semble pas fonctionner.
Sous-classement UITextField juste pour ajouter un rembourrage n'a pas de sens pour moi. Donc, je itéré tous UITextFields pour ajouter le rembourrage.
textfieldarray
n'est pas définie dans la deuxièmeif
bloc, j'ai utilisé cet extrait (merci!) avec le succès après le remplacement du contenu de la secondeif
avecfor(id subSubView in [view subviews]){[self addPaddingToAllTextFields:subSubView];}
Brody de la solution travaillé parfait pour moi. J'ai dû ajouter des vues de côté sur un champ de texte et ajouter un rembourrage supplémentaire. Donc, par la mise en œuvre de la coutume UIEdgeInsets de la propriété à une sous-classe UITextField, j'ai réussi à réaliser la tâche. Je vais utiliser cette nouvelle sous-classe dans tous mes projets.
va ajouter de la frontière, qui a travaillé comme rembourrage pour moi.
Nate Flink est réponse est mon préféré, mais n'oubliez pas droite/gauche de la vue.
E. g pour
UITextField
sous-classe:Code ci-dessus à droite de rembourrage pour
rightView
deUITextField
.Voici un code Swift pour donner un rembourrage en UITextfield
et appel à l'aide de
vous pouvez utiliser de la catégorie. de padding à gauche et à droite
UITextField+Rembourrage.h
UITextField+Rembourrage.m
vous pouvez définir rembourrage comme ce
auto.phoneNumTF.paddingValue=10.f;
ou
auto.phoneNumTF.leftPadding=10.f;
Si quelqu'un est à la recherche d'
Swift 4.0
version ci-dessousextension
est le travail. Il a à la foisLeft
etRight
rembourrage pourUITextField
. En fait, il estIBInspectable
pour le storyboard de configuration. Vous pouvez définir la valeur directement à partir de l'Interface Builder /Storyboard. Ceci est testé code Swift version 4.0 et Xcode 9.0Gardez à l'esprit que si vous souhaitez activer
Clear Button
sur le mêmeUITextField
alors vous avez à garder la Droite Rembourrage vide.Une autre considération est que, si vous avez plus d'un
UITextField
où vous ajoutez rembourrage, est de créer unUIView
pour chaque textfield - parce qu'ils ne peuvent pas être partagés.Pourquoi ne pas Attribuée Chaîne !?!, c'est l'un de la bénédiction de la fonctionnalité d'IOS 6.0 🙂
La meilleure solution que j'ai trouvé pour l'instant est une catégorie. Voilà comment j'ai ajouter 5 points de remplissage à gauche et à droite:
La directive #pragma sont juste pour enlever les avertissements ennuyeux
Je l'ai trouvé beaucoup plus facile d'utiliser une non-modifiable
UITextView
et définir lacontentOffset