Wie kann man die Platzhalterfarbe des dynamisch ändern UITextField
? Dies ist immer die gleiche Systemfarbe.
Keine Option im xib-Editor.
Wie kann man die Platzhalterfarbe des dynamisch ändern UITextField
? Dies ist immer die gleiche Systemfarbe.
Keine Option im xib-Editor.
Antworten:
Aus Dokumenten
@property (nichtatomar, Kopie) NSAttributedString * attributedPlaceholder
Diese Eigenschaft ist standardmäßig gleich Null. Wenn festgelegt, wird die Platzhalterzeichenfolge mit einer 70% igen Graufarbe und den verbleibenden Stilinformationen (außer der Textfarbe) der zugewiesenen Zeichenfolge gezeichnet. Durch das Zuweisen eines neuen Werts zu dieser Eigenschaft wird auch der Wert der Platzhalter-Eigenschaft durch dieselben Zeichenfolgendaten ersetzt, allerdings ohne Formatierungsinformationen. Das Zuweisen eines neuen Werts zu dieser Eigenschaft wirkt sich nicht auf andere stilbezogene Eigenschaften des Textfelds aus.
Ziel c
NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"Some Text" attributes:@{ NSForegroundColorAttributeName : [UIColor redColor] }];
self.myTextField.attributedPlaceholder = str;
Schnell
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
NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"Some Text" attributes:@{ UITextAttributeTextColor : [UIColor redColor] }];
_placeholderLabel.textColor
In kurzer Zeit
myTextField.attributedPlaceholder =
NSAttributedString(string: "placeholder", attributes:[NSForegroundColorAttributeName : UIColor.redColor()])
Ziel c
UIColor *color = [UIColor grayColor];
nameText.attributedPlaceholder =
[[NSAttributedString alloc]
initWithString:@"Full Name"
attributes:@{NSForegroundColorAttributeName:color}];
PS 3 verschiedene Antworten von Stackoverflow kopiert.
_placeholderLabel
: Einige Benutzer melden Ablehnung des App Store: stackoverflow.com/questions/1340224/…
Verwenden Sie den folgenden Code
[YourtextField setValue:[UIColor colorWithRed:97.0/255.0 green:1.0/255.0 blue:17.0/255.0 alpha:1.0] forKeyPath:@"_placeholderLabel.textColor"];
Fügen Sie zuerst diese Erweiterung hinzu
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
}
}
}
Anschließend können Sie die Farbe des Platzhaltertextes über das Storyboard oder einfach wie folgt ändern:
textfield.placeHolderTextColor = UIColor.red
Ich benutze dies in SWIFT:
myTextField.attributedPlaceholder =
NSAttributedString(string: "placeholder", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])
Es scheint, dass dies für andere funktioniert ... Ich habe keine Ahnung, warum es bei mir vorher nicht funktioniert hat ... vielleicht einige Projekteinstellungen. Danke für die Kommentare. Derzeit habe ich keine Möglichkeit, es erneut zu testen.
Veraltet: Aber ich weiß nicht warum, Text wird korrekt angewendet, aber die Platzhalterfarbe bleibt gleich (schwarz / grau).
--iOS8
Versuche dies:
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;
Sie können den folgenden Code verwenden
[txtUsername setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
Diese Lösung funktioniert ohne Unterklassen und ohne private Ivars:
@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
}
}
}
@ DogCoffees Antwort in Swift wäre
let placeholderAttrs = [ NSForegroundColorAttributeName : UIColor.redColor()]
let placeholder = NSAttributedString(string: "Some text", attributes: placeholderAttrs)
textField.attributedPlaceholder = placeholder
Dies ist eine verbesserte Version der Erweiterung von @Medin Piranej (gute Idee übrigens!). Diese Version vermeidet einen endlosen Zyklus, wenn Sie versuchen, placeHolderTextColor abzurufen, und verhindert Abstürze, wenn der Farbsatz Null ist.
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 ?? "")
}
}
}
}}
Für Swift 3 können wir diesen Code verwenden, um die Platzhaltertextfarbe für UITextfield zu ändern
let placeholderColor = UIColor.red
mytextField.attributedPlaceholder = NSAttributedString(string: mytextField.placeholder, attributes: [NSForegroundColorAttributeName : placeholderColor])