Изменение цвета заполнителя UITextField

Как динамически изменить цвет заполнителя UITextField? Это всегда один и тот же системный цвет.

В редакторе xib нет опции.

Ответ 1

Из документов

@property (nonatomic, copy) NSAttributedString * attribuPlaceholder

Это свойство по умолчанию равно nil. Если установлено, строка-заполнитель рисуется с использованием 70% серого цвета и оставшейся информации о стиле (кроме цвета текста) приписанной строки. Присвоение нового значения этому свойству также заменяет значение свойства заполнителя теми же строковыми данными, хотя и без какой-либо информации о форматировании. Присвоение нового значения этому свойству не влияет на другие связанные со стилем свойства текстового поля.

Objective-C

NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"Some Text" attributes:@{ NSForegroundColorAttributeName : [UIColor redColor] }];
self.myTextField.attributedPlaceholder = str;

стриж

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

Ответ 2

Easy and perfect solution.

_placeholderLabel.textColor

В быстрой

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. Скопировано 3 разных ответа из Stackoverflow.

Ответ 3

Используйте ниже код

[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

Сначала добавьте это расширение

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

Затем вы можете изменить цвет текста-заполнителя с помощью раскадровки или просто настроить его следующим образом:

textfield.placeHolderTextColor = UIColor.red

Ответ 5

Я использую это в SWIFT:

myTextField.attributedPlaceholder = NSAttributedString(string: "placeholder", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])

Кажется, что это работает для других... Я понятия не имею, почему это не сработало для меня раньше... может быть, некоторые настройки проекта. Спасибо за комментарии. В настоящее время у меня нет способа проверить его снова.

Устаревшие: Но я не знаю, почему текст применяется правильно, но цвет заполнителя остается таким же (черный/серый).

- iOS8

Ответ 6

Попробуйте следующее:

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;

Ответ 7

Вы можете использовать следующий код

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

Ответ 8

Это решение работает без какого-либо подкласса и без каких-либо личных 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
        }
    }
}

Ответ 9

Попробуйте это.

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

Ответ 10

@DogCoffee ответ в Swift будет

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

textField.attributedPlaceholder = placeholder

Ответ 11

Это улучшенная версия расширения, предоставленная @Medin Piranej выше (хорошая идея, кстати!). Эта версия позволяет избежать бесконечного цикла, если вы попытаетесь получить placeHolderTextColor и предотвратите сбои, если набор цветов равен нулю.

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

}

Ответ 12

для swift 3 мы можем использовать этот код для изменения цвета текста заполнителя для UITextfield

 let placeholderColor = UIColor.red
 mytextField.attributedPlaceholder = NSAttributedString(string: mytextField.placeholder, attributes: [NSForegroundColorAttributeName : placeholderColor])

Ответ 13

Swift 4

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

Ответ 14

[yourtextFieldName setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"];