598 Stimmen

iPhone UITextField - Farbe des Platzhaltertextes ändern

Ich würde gerne die Farbe des Platzhaltertextes ändern, den ich in meinem UITextField Kontrollen, um es schwarz zu machen.

Ich würde es vorziehen, dies zu tun, ohne normalen Text als Platzhalter zu verwenden und alle Methoden überschreiben zu müssen, um das Verhalten eines Platzhalters zu imitieren.

Ich glaube, wenn ich diese Methode außer Kraft setze:

- (void)drawPlaceholderInRect:(CGRect)rect

dann sollte ich in der Lage sein, dies zu tun. Aber ich bin unsicher, wie man das tatsächliche Platzhalter-Objekt aus dieser Methode zugreifen.

157voto

digdog Punkte 4190

Vielleicht möchten Sie es auf diese Weise versuchen, aber Apple könnte Sie vor dem Zugriff auf privates ivar warnen:

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

ANMERKUNG
Laut Martin Alléus funktioniert dies unter iOS 7 nicht mehr.

96voto

Nike Kov Punkte 11508

Swift 3.0 + Storyboard

Um die Farbe des Platzhalters im Storyboard zu ändern, erstellen Sie eine Erweiterung mit dem folgenden Code. (Sie können diesen Code gerne aktualisieren, wenn Sie denken, dass er klarer und sicherer sein kann).

extension UITextField {
    @IBInspectable var placeholderColor: UIColor {
        get {
            guard let currentAttributedPlaceholderColor = attributedPlaceholder?.attribute(NSForegroundColorAttributeName, at: 0, effectiveRange: nil) as? UIColor else { return UIColor.clear }
            return currentAttributedPlaceholderColor
        }
        set {
            guard let currentAttributedString = attributedPlaceholder else { return }
            let attributes = [NSForegroundColorAttributeName : newValue]

            attributedPlaceholder = NSAttributedString(string: currentAttributedString.string, attributes: attributes)
        }
    }
}

enter image description here

Version Swift 4

extension UITextField {
    @IBInspectable var placeholderColor: UIColor {
        get {
            return attributedPlaceholder?.attribute(.foregroundColor, at: 0, effectiveRange: nil) as? UIColor ?? .clear
        }
        set {
            guard let attributedPlaceholder = attributedPlaceholder else { return }
            let attributes: [NSAttributedStringKey: UIColor] = [.foregroundColor: newValue]
            self.attributedPlaceholder = NSAttributedString(string: attributedPlaceholder.string, attributes: attributes)
        }
    }
}

Swift 5-Version

extension UITextField {
    @IBInspectable var placeholderColor: UIColor {
        get {
            return attributedPlaceholder?.attribute(.foregroundColor, at: 0, effectiveRange: nil) as? UIColor ?? .clear
        }
        set {
            guard let attributedPlaceholder = attributedPlaceholder else { return }
            let attributes: [NSAttributedString.Key: UIColor] = [.foregroundColor: newValue]
            self.attributedPlaceholder = NSAttributedString(string: attributedPlaceholder.string, attributes: attributes)
        }
    }
}

78voto

Beninho85 Punkte 3175

In Swift:

if let placeholder = yourTextField.placeholder {
    yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder, 
        attributes: [NSForegroundColorAttributeName: UIColor.blackColor()])
}

In Swift 4.0:

if let placeholder = yourTextField.placeholder {
    yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder, 
        attributes: [NSAttributedStringKey.foregroundColor: UIColor.black])
}

43voto

Gaurav Gilani Punkte 1586

Das Folgende nur mit iOS6+ (wie in Alexander W's Kommentar angegeben):

UIColor *color = [UIColor grayColor];
nameText.attributedPlaceholder =
   [[NSAttributedString alloc]
       initWithString:@"Full Name"
       attributes:@{NSForegroundColorAttributeName:color}];

36voto

Ashu Punkte 3075

Ich hatte bereits mit diesem Problem zu kämpfen. In meinem Fall ist der folgende Code korrekt.

Zielsetzung C

[textField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];

Für Swift 4.X

tf_mobile.setValue(UIColor.white, forKeyPath: "_placeholderLabel.textColor")

Für iOS 13 Swift Code

tf_mobile.attributedPlaceholder = NSAttributedString(string:"PlaceHolder Text", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])

Sie können auch den folgenden Code verwenden für iOS 13

let iVar = class_getInstanceVariable(UITextField.self, "_placeholderLabel")!
let placeholderLabel = object_getIvar(tf_mobile, iVar) as! UILabel
placeholderLabel.textColor = .red

Ich hoffe, das kann Ihnen helfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X