Comment changer dynamiquement la couleur de l'espace réservé du UITextField
? C'est toujours la même couleur système.
Aucune option dans l'éditeur xib.
à partir de la documentation
@property (nonatomic, copy) NSAttributedString * attribuéPlaceholder
Cette propriété est nil par défaut. Si défini, la chaîne de caractères génériques est dessinée en utilisant une couleur grise à 70% et les informations de style restantes (à l'exception de la couleur du texte) de la chaîne attribuée. L'affectation d'une nouvelle valeur à cette propriété remplace également la valeur de la propriété d'espace réservé par les mêmes données de chaîne, mais sans aucune information de mise en forme. L'affectation d'une nouvelle valeur à cette propriété n'affecte pas les autres propriétés du champ de texte liées au style.
Objective-C
NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"Some Text" attributes:@{ NSForegroundColorAttributeName : [UIColor redColor] }];
self.myTextField.attributedPlaceholder = str;
rapide
let str = NSAttributedString(string: "Text", attributes: [NSForegroundColorAttributeName:UIColor.redColor()])
myTextField.attributedPlaceholder = str
Swift 4
let str = NSAttributedString(string: "Text", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])
myTextField.attributedPlaceholder = str
_placeholderLabel.textColor
dans Swift
myTextField.attributedPlaceholder =
NSAttributedString(string: "placeholder", attributes:[NSForegroundColorAttributeName : UIColor.redColor()])
Objective-C
UIColor *color = [UIColor grayColor];
nameText.attributedPlaceholder =
[[NSAttributedString alloc]
initWithString:@"Full Name"
attributes:@{NSForegroundColorAttributeName:color}];
P.S Copié 3 réponses différentes de Stackoverflow.
Utilisez le code ci-dessous
[YourtextField setValue:[UIColor colorWithRed:97.0/255.0 green:1.0/255.0 blue:17.0/255.0 alpha:1.0] forKeyPath:@"_placeholderLabel.textColor"];
Ajoutez d'abord cette extension
extension UITextField{
@IBInspectable var placeHolderTextColor: UIColor? {
set {
let placeholderText = self.placeholder != nil ? self.placeholder! : ""
attributedPlaceholder = NSAttributedString(string:placeholderText, attributes:[NSForegroundColorAttributeName: newValue!])
}
get{
return self.placeHolderTextColor
}
}
}
Ensuite, vous pouvez changer la couleur du texte des espaces réservés via le storyboard ou simplement en le définissant comme suit:
textfield.placeHolderTextColor = UIColor.red
J'utilise ceci dans Swift:
myTextField.attributedPlaceholder = NSAttributedString(string: "placeholder", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])
Il semble que cela fonctionne pour d'autres ... Je ne sais pas pourquoi cela n'a pas fonctionné pour moi auparavant ... peut-être quelques paramètres de projet. Merci pour les commentaires. Actuellement, je n'ai aucun moyen de le tester à nouveau.
Obsolète: Mais je ne sais pas pourquoi, le texte est appliqué correctement, mais la couleur de l'espace réservé reste identique (noir/gris).
--iOS8
Essaye ça:
NSAttributedString *strUser = [[NSAttributedString alloc] initWithString:@"Username" attributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor] }];
NSAttributedString *strPassword = [[NSAttributedString alloc] initWithString:@"Password" attributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor] }];
self.username.attributedPlaceholder = strUser;
self.password.attributedPlaceholder = strPassword;
Vous pouvez utiliser le code suivant
[txtUsername setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
Cette solution fonctionne sans aucun sous-classement et sans ivars privés:
@IBOutlet weak var emailTextField: UITextField! {
didSet {
if emailTextField != nil {
let placeholderText = NSLocalizedString("Tap here to enter", comment: "Tap here to enter")
let placeholderString = NSAttributedString(string: placeholderText, attributes: [NSForegroundColorAttributeName: UIColor(white: 0.66, alpha: 1.0)])
emailTextField.attributedPlaceholder = placeholderString
}
}
}
Essaye ça.
UIColor *color = [UIColor redColor];
self.txtUsername.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Your Placeholder Text" attributes:@{NSForegroundColorAttributeName:color}];
pour Swift 3, nous pouvons utiliser ce code pour changer la couleur du texte de substitution pour UITextfield
let placeholderColor = UIColor.red
mytextField.attributedPlaceholder = NSAttributedString(string: mytextField.placeholder, attributes: [NSForegroundColorAttributeName : placeholderColor])
Swift 4
let placeholderColor = UIColor.red
self.passwordTextField?.attributedPlaceholder =
NSAttributedString(string:"placeholderText", attributes:
[NSAttributedStringKey.foregroundColor : placeholderColor])
La réponse de @ DogCoffee dans Swift serait
let placeholderAttrs = [ NSForegroundColorAttributeName : UIColor.redColor()]
let placeholder = NSAttributedString(string: "Some text", attributes: placeholderAttrs)
textField.attributedPlaceholder = placeholder
Ceci est une version améliorée de l'extension fournie par @Medin Piranej ci-dessus (bonne idée en passant!). Cette version évite un cycle sans fin si vous essayez d’obtenir le placeHolderTextColor et évite les plantages si le jeu de couleurs est nul.
public extension UITextField {
@IBInspectable public var placeholderColor: UIColor? {
get {
if let attributedPlaceholder = attributedPlaceholder, attributedPlaceholder.length > 0 {
var attributes = attributedPlaceholder.attributes(at: 0,
longestEffectiveRange: nil,
in: NSRange(location: 0, length: attributedPlaceholder.length))
return attributes[NSForegroundColorAttributeName] as? UIColor
}
return nil
}
set {
if let placeholderColor = newValue {
attributedPlaceholder = NSAttributedString(string: placeholder ?? "",
attributes:[NSForegroundColorAttributeName: placeholderColor])
} else {
// The placeholder string is drawn using a system-defined color.
attributedPlaceholder = NSAttributedString(string: placeholder ?? "")
}
}
}
}