Änderung der UITextField-Platzhalterfarbe


Antworten:


163

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

Ich kann es nicht testen, NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString: myString]; ist immer null.
TheWalker

Warum erstellen Sie eine veränderbare zugeordnete Zeichenfolge? Tun Sie einfach:NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"Some Text" attributes:@{ UITextAttributeTextColor : [UIColor redColor] }];
rmaddy

Cheers @rmaddy, ich habe NSForegroundColorAttributeName verwendet.
DogCoffee

41

Einfache und perfekte Lösung.

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


3
Warnung für _placeholderLabel: Einige Benutzer melden Ablehnung des App Store: stackoverflow.com/questions/1340224/…
ftvs

Wenn Sie _placeholderLabel verwendet haben, erhalten Sie diesen Absturz. Der Zugriff auf _placeholderLabel ivar von UITextField ist verboten. Dies ist ein Anwendungsfehler
Hosny

12

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"];

4
Ihre App wird abgelehnt, wenn Sie dies verwenden und auf die private API zugreifen. Verwenden Sie stattdessen die Eigenschaft attributePlaceholder des UITextField.
Aumanets

Ich denke, dies ist keine private API, die Sie auch in der aktuellen App verwenden können. Keine private API verwenden
Pradhyuman sinh

1
@aumanets es ist keine private API ... Es ist Privateigentum von UITextfield .. Es ist Schlüsselwertcodierung ... überprüfen Sie diese stackoverflow.com/questions/16601468/…
Pradhyuman sinh

2
Ja, Sie haben Recht, es ist ein Privateigentum. Auf jeden Fall ist es keine gute Praxis, auf diese Weise auf Eigenschaften / Variablen zuzugreifen. Eines Tages kann Apple den Namen dieser Eigenschaft in einen anderen Namen ändern, der die App zum Absturz bringt, und Sie erhalten keine Kompilierungswarnung in Ihrem Code.
Aumanets

1
Wenn Sie _placeholderLabel verwendet haben, erhalten Sie diesen Absturz. Der Zugriff auf _placeholderLabel ivar von UITextField ist verboten. Dies ist ein Anwendungsfehler
Hosny

5

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

3

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


2
Dies ist keine Antwort
Alex Pretzlav

Ja, ist es nicht (weder Ihr Kommentar). Aber ich möchte keinen neuen Thread starten, da dieser Code genau der gleiche obj-c-Code ist, der schnell umgeschrieben wurde.
Tomino

Ich weiß nicht, warum es bei dir nicht funktioniert hat. Aber es hat bei mir gut
funktioniert

Ich weiß es auch nicht, aber es scheint, dass dies für andere funktioniert :-) Vielleicht einige Projekteinstellungen ...
Tomino

2

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;

1

Sie können den folgenden Code verwenden

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

1

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

1

Versuche dies.

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

0

@ DogCoffees Antwort in Swift wäre

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

textField.attributedPlaceholder = placeholder

0

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

}}


0

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

0

Swift 4

let placeholderColor = UIColor.red
self.passwordTextField?.attributedPlaceholder = 
NSAttributedString(string:"placeholderText", attributes: 
[NSAttributedStringKey.foregroundColor : placeholderColor])
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.