Je voudrais changer la couleur du texte d'espace réservé que j'ai défini dans mes UITextField
contrôles, pour le rendre noir.
Je préfère le faire sans utiliser de texte normal comme espace réservé et sans avoir à remplacer toutes les méthodes pour imiter le comportement d'un espace réservé.
Je crois que si je remplace cette méthode:
- (void)drawPlaceholderInRect:(CGRect)rect
alors je devrais pouvoir le faire. Mais je ne sais pas comment accéder à l'objet d'espace réservé réel à partir de cette méthode.
ios
uitextfield
Adam
la source
la source
attributedPlaceholder
dit qui utilise des attributs de texte, à l'exception de la couleur.[[NSAttributedString alloc] initWithString:@"placeholder" attributes: @{NSForegroundColorAttributeName: color, NSFontAttributeName : font}];
[<UITextField 0x11561d90> valueForUndefinedKey:]: this class is not key value coding-compliant for the key _field.
Facile et sans douleur, pourrait être une alternative facile pour certains.
Non suggéré pour la production, Apple peut rejeter votre soumission.
la source
_placeholderLabel
est une propriété privée. Cette solution est susceptible d'être rejetée pour l'utilisation d'une API privée.Vous pouvez remplacer en
drawPlaceholderInRect:(CGRect)rect
tant que tel pour rendre manuellement le texte de l'espace réservé:la source
[self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];
est probablement mieux. De cette façon, vous respecterez latextAlignment
propriété. J'ai ajouté cela à ma classe SSTextField . N'hésitez pas à utiliser dans vos projets.Vous pouvez changer la couleur du texte de l'espace réservé en n'importe quelle couleur souhaitée en utilisant le code ci-dessous.
la source
Vous voulez peut-être essayer de cette façon, mais Apple pourrait vous avertir de l'accès à ivar privé:
REMARQUE
Cela ne fonctionne plus sur iOS 7, selon Martin Alléus.
la source
Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug
😈Cela fonctionne dans Swift <3.0:
Testé dans iOS 8.2 et iOS 8.3 beta 4.
Swift 3:
Swift 4:
Swift 4.2:
la source
Dans Swift:
Dans Swift 4.0:
la source
Swift 3.0 + Storyboard
Afin de changer la couleur de l'espace réservé dans le storyboard, créez une extension avec le code suivant. (n'hésitez pas à mettre à jour ce code, si vous le pensez, il peut être plus clair et plus sûr).
Version Swift 4
Version Swift 5
la source
NSAttributedStringKey
.Ce qui suit uniquement avec iOS6 + (comme indiqué dans le commentaire d'Alexander W):
la source
J'avais déjà fait face à ce problème. Dans mon cas, le code ci-dessous est correct.
Objectif c
Pour Swift 4.X
Pour iOS 13 Swift Code
Vous pouvez également utiliser le code ci-dessous pour iOS 13
J'espère que cela peut vous aider.
la source
viewWillAppear
ouviewDidAppear
.viewDidLoad
est trop tôt.Avec cela, nous pouvons changer la couleur du texte d'espace réservé de textfield dans iOS
la source
Pourquoi n'utilisez-vous pas simplement la
UIAppearance
méthode:la source
Aussi dans votre storyboard, sans une seule ligne de code
la source
dans swift 3.X
dans swift 5
la source
Pour iOS 6.0 +
J'espère que cela aide.
Remarque: Apple peut rejeter (0,01% de chances) votre application car nous accédons à une API privée. J'utilise cela dans tous mes projets depuis deux ans, mais Apple ne l'a pas demandé.
la source
terminating with uncaught exception of type NSException
pour iOS8Pour les développeurs Xamarin.iOS, je l'ai trouvé à partir de ce document https://developer.xamarin.com/api/type/Foundation.NSAttributedString/
la source
new NSAttributedString("placeholderstring", new CTStringAttributes() { ForegroundColor = UIColor.Blue.CGColor });
Version rapide. Cela aiderait probablement quelqu'un.
la source
Catégories FTW. Pourrait être optimisé pour vérifier un changement de couleur efficace.
la source
Pour gérer à la fois l'alignement vertical et horizontal ainsi que la couleur de l'espace réservé dans iOS7. drawInRect et drawAtPoint n'utilisent plus le contexte actuel fillColor.
https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html
Obj-C
la source
iOS 6 et offre plus tard
attributedPlaceholder
surUITextField
. iOS 3.2 et offre plus tardsetAttributes:range:
surNSMutableAttributedString
.Vous pouvez effectuer les opérations suivantes:
la source
Cette solution pour Swift 4.1
la source
Remplacer
drawPlaceholderInRect:
serait la bonne façon, mais cela ne fonctionne pas en raison d'un bogue dans l'API (ou la documentation).La méthode n'est jamais appelée sur un
UITextField
.Voir également drawTextInRect sur UITextField non appelé
Vous pouvez utiliser la solution de digdog. Comme je ne suis pas sûr que cela passe le contrôle des pommes, j'ai choisi une solution différente: superposer le champ de texte avec ma propre étiquette qui imite le comportement de l'espace réservé.
C'est un peu compliqué cependant. Le code ressemble à ceci (notez que je fais cela dans une sous-classe de TextField):
la source
Je suis nouveau sur xcode et j'ai trouvé un moyen de parvenir au même effet.
J'ai placé un uilabel à la place du support de place avec le format souhaité et le cache dans
Je suis d'accord que c'est une solution de contournement et pas une vraie solution, mais l'effet était le même que ce lien
REMARQUE: fonctionne toujours sur iOS 7: |
la source
Swift 5 AVEC CAVEAT.
La mise en garde étant que vous DEVEZ entrer un non-vide
String
où "DON'T_DELETE" est, même si cette chaîne est définie dans le code ailleurs. Cela pourrait vous faire économiser cinq minutes de capture de tête.la source
Le mieux que je puisse faire pour iOS7 et moins est:
la source
Pour ceux qui utilisent Monotouch (Xamarin.iOS), voici la réponse d'Adam, traduite en C #:
la source
Font
propriété du champ de texte.Je devais garder l'alignement des espaces réservés, donc la réponse d'Adam ne me suffisait pas.
Pour résoudre ce problème, j'ai utilisé une petite variation qui, j'espère, aidera également certains d'entre vous:
la source
UILineBreakModeTailTruncation
est obsolète à partir d'iOS 6.la source
Pour définir un espace réservé de champ de texte attribué avec plusieurs couleurs,
Spécifiez simplement le texte,
Production :-
la source
Une autre option qui ne nécessite pas de sous-classement - laissez l'espace réservé vide et placez une étiquette au-dessus du bouton d'édition. Gérez l'étiquette comme vous le feriez pour l'espace réservé (effacement une fois que l'utilisateur a saisi quoi que ce soit ..)
la source