web-dev-qa-db-fra.com

Changement de couleur d'espace réservé UITextField

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.

73
theWalker

à 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
162
DogCoffee

Easy and perfect solution.

_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.

41
iAhmed

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"];
12
Pradhyuman sinh

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
5
Medin Piranej

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

3
Tomino

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;
2

Vous pouvez utiliser le code suivant

[txtUsername setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
1
Hardik Mamtora

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
        }
    }
}
1
Ron

Essaye ça.

UIColor *color = [UIColor redColor];
self.txtUsername.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Your Placeholder Text" attributes:@{NSForegroundColorAttributeName:color}];
1
Kuldeep

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])
0
Waliyan

Swift 4

let placeholderColor = UIColor.red
self.passwordTextField?.attributedPlaceholder = 
NSAttributedString(string:"placeholderText", attributes: 
[NSAttributedStringKey.foregroundColor : placeholderColor])
0
Adriana

La réponse de @ DogCoffee dans Swift serait

let placeholderAttrs = [ NSForegroundColorAttributeName : UIColor.redColor()]
let placeholder = NSAttributedString(string: "Some text", attributes: placeholderAttrs)

textField.attributedPlaceholder = placeholder
0
rodrigoalves

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 ?? "")
        }
    }
}

}

0
boherna