Je veux laisser un peu d'espace au début d'un UITextField, comme ici: Ajouter une marge gauche à UITextField
Mais je ne sais pas comment faire ça avec Swift.
ios
swift
cocoa-touch
uitextfield
LinusGeffarth
la source
la source
UITextField.leftView = paddingView
. alors donnez au rembourrage la largeur souhaitée.Réponses:
Voici ce que j'utilise actuellement:
Swift 4.2
Swift 4
Swift 3:
Je n'ai jamais défini un autre rembourrage, mais vous pouvez modifier. Cette classe ne prend pas en charge la rightView et la leftView sur le champ de texte. Si vous voulez que cela soit géré correctement, vous pouvez utiliser quelque chose comme (exemple dans objc et je n'avais besoin que du rightView:
la source
newBounds
méthode avec laUIEdgeInsetsInsetRect
fonction. Au lieu de cela,return self.newBounds(bounds)
vous pouvez utiliserreturn UIEdgeInsetsInsetRect(bounds, padding)
et supprimer lanewBounds
méthode.Si vous utilisez une extension, il n'est pas nécessaire de sous-classer UITextField et la nouvelle fonctionnalité sera mise à disposition de n'importe quel UITextField de votre application:
Lorsque j'ai besoin de définir le remplissage d'un champ de texte n'importe où dans mon application, je fais simplement ce qui suit:
En utilisant les extensions Swift, la fonctionnalité est ajoutée directement à UITextField sans sous-classification.
J'espère que cela t'aides!
la source
X, Y, Z sont vos valeurs souhaitées
la source
Une telle marge peut être obtenue en réglant
leftView
/rightView
toUITextField
.Mis à jour pour Swift 4
Je viens d'ajouter / placer un
UIView
côté gauche et droit du champ de texte. Alors maintenant, la saisie commencera après la vue.Merci
J'espère que cela a aidé ...
la source
Swift 4, Xcode 9
J'aime la réponse de Pheepster , mais que diriez-vous de tout faire à partir de l'extension, sans nécessiter de code VC ou de sous-classement:
la source
rightView?.frame.size.width ?? 0
paddingLeft
àpaddingLeftCustom
et de l'autre aussi. Si je ne l'ai pas fait, un bogue qui m'a suivi pendant deux semaines serait apparu lorsque vous utilisiez des vues qui ont un UITextView (comme UISearchBar). Juste ... ne définissez pas les noms par défaut.dans Swift 4.2 et Xcode 10
Au départ, mon champ de texte est comme ça.
Après avoir ajouté un remplissage sur le côté gauche, mon champ de texte est ...
Comme cela, nous pouvons également créer le côté droit. (TextFieldName.rightViewMode = .always)
Si vous voulez un code de type SharedInstance (écrire une fois, utilisez tous les articles), consultez le code ci-dessous.
Appelez maintenant cette fonction comme ceci.
la source
Solution simple Swift 3 - ajoutez du code à viewDidLoad:
Pas besoin de code ridiculement long
la source
Utilisez mon extension Swift 5 testée:
Comment utiliser
la source
Pour créer une vue de remplissage pour UITextField dans Swift 5
la source
Sous-classer UITextField est la voie à suivre. Ouvrez une aire de jeux et ajoutez le code suivant:
la source
Voici la réponse de Haagenti mise à jour vers Swift 4.2:
Référence: mise à niveau vers Swift 4.2 .
Modifier : comptez pour le bouton d'effacement.
la source
Créez UIView avec l'espace de remplissage requis et ajoutez-le au membre textfield.leftView et définissez le membre textfield.leftViewMode sur UITextFieldViewMode.Always
la source
Mettez ce code dans votre
viewDidLoad()
:Ça marche pour moi :)
la source
Cette seule ligne de code m'a sauvé:
Pour Xamarin.iOS:
Pour Swift:
la source
La réponse de ScareCrow dans Swift 3
la source
Dans Swift 3. Vous pouvez utiliser UITextField personnalisé avec un retrait défini dans son constructeur. Pas besoin de déclaration supplémentaire dans un contrôleur.
la source
Méthode simple: pour ce faire en étendant UITextField
Ensuite, vous pouvez définir le remplissage sur n'importe quel bord de cette façon:
la source
Je préfère utiliser la
IBDesignable
classe et lesIBInspectable
propriétés pour me permettre de définir le remplissage via des storyboards Xcode et de le garder réutilisable. J'ai également mis à jour le code pour qu'il fonctionne dans Swift 4.la source
* Extension de UITextField dans Swift 5 *
la source
la source