更改UITextField占位符颜色

时间:2014-01-12 12:07:42

标签: ios uitextfield

如何动态更改UITextField的占位符颜色? 这始终是相同的系统颜色。

xib编辑器中没有选项。

13 个答案:

答案 0 :(得分:162)

来自文档

  

@property(非原子,复制)NSAttributedString * attributedPlaceholder

     

默认情况下,此属性为零。如果设置,则占位符字符串为   使用70%灰色和剩余的样式信息绘制   (属性字符串除外)(文本颜色除外)。分配新的   此属性的值也替换占位符的值   具有相同字符串数据的属性,尽管没有任何格式   信息。为此属性分配新值不会影响   文本字段的任何其他与样式相关的属性。

<强>目标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

答案 1 :(得分:12)

使用以下代码

[YourtextField setValue:[UIColor colorWithRed:97.0/255.0 green:1.0/255.0 blue:17.0/255.0 alpha:1.0] forKeyPath:@"_placeholderLabel.textColor"];

答案 2 :(得分:5)

首先添加此扩展程序

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

答案 3 :(得分:3)

我在SWIFT中使用它:

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

这似乎适用于其他人...... 我不知道为什么它之前没有为我工作......也许是一些项目设置。感谢您的评论。目前我无法再次测试它。

过时: 但我不知道为什么,正确应用文字,但占位符颜色保持不变(黑/灰)。

- iOS8上

答案 4 :(得分:2)

试试这个:

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;

答案 5 :(得分:1)

您可以使用以下代码

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

答案 6 :(得分:1)

此解决方案在没有任何子类化且没有任何私有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
        }
    }
}

答案 7 :(得分:1)

试试这个。

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

答案 8 :(得分:0)

@ DogCoffee在Swift中的回答是

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

textField.attributedPlaceholder = placeholder

答案 9 :(得分:0)

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

}

答案 10 :(得分:0)

对于swift 3,我们可以使用此代码更改UITextfield的占位符文本颜色

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

答案 11 :(得分:0)

雨燕4

SIGPIPE

答案 12 :(得分:-2)

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