如何动态更改UITextField
的占位符颜色?
这始终是相同的系统颜色。
xib编辑器中没有选项。
答案 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"];