用Swift改变占位符的文本颜色

我有一个devise,实现了一个深蓝色的UITextField,因为占位符文本是默认的深灰色,我几乎可以弄清楚占位符文本说什么。

我已经用Googlesearch了这个问题,但是我还没有想出使用Swift语言而不是Obj-c的解决scheme。

有没有办法改变使用Swift UITextField中的占位符文本颜色?

您可以使用属性string来设置占位符文本。 将所需的颜色与attributes一起传递:

 var myTextField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 30)) myTextField.backgroundColor = .blue myTextField.attributedPlaceholder = NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName: UIColor.yellow]) 

对于Swift 3+使用以下内容:

 myTextField.attributedPlaceholder = NSAttributedString(string: "placeholder text", attributes: [NSAttributedStringKey.foregroundColor: UIColor.white]) 

您可以快速完成此操作,而无需使用Interface Builder添加一行代码。

selectUITextField并打开右侧的身份检查器:

在这里输入图像说明

点击加号button,添加一个新的运行时属性: _placeholderLabel.textColor

使用颜色作为types并select颜色。

你不会看到结果,直到你再次运行你的应用程序。

像这样创buildUITextField扩展:

 extension UITextField{ @IBInspectable var placeHolderColor: UIColor? { get { return self.placeHolderColor } set { self.attributedPlaceholder = NSAttributedString(string:self.placeholder != nil ? self.placeholder! : "", attributes:[NSForegroundColorAttributeName: newValue!]) } } } 

并在你的故事板或.xib。 你会看见

在这里输入图像说明

此代码在Swift3中工作:

 yourTextFieldName .setValue(UIColor.init(colorLiteralRed: 80/255, green: 80/255, blue: 80/255, alpha: 1.0), forKeyPath: "_placeholderLabel.textColor") 

让我知道如果你有任何问题。

在Swift 3.0中,使用

 let color = UIColor.lightText textField.attributedPlaceholder = NSAttributedString(string: textField.placeholder, attributes: [NSForegroundColorAttributeName : color]) 

要为您的应用程序中的所有UITextField设置一次占位符颜色,您可以执行以下操作:

 UILabel.appearanceWhenContainedInInstancesOfClasses([UITextField.self]).textColor = UIColor.redColor() 

这将为整个应用程序中的所有TextField占位符设置所需的颜色。 但它仅在iOS 9以后才可用。

在iOS 9之前没有出现appearanceWhenContainedIn ….()方法,但是可以使用这里提供的解决scheme之一appearanceWhenContainedIn Swift

Swift 3(可能是2),你可以在UITextField子类上的占位符上覆盖didSet来应用它的属性,这样:

 override var placeholder: String? { didSet { guard let tmpText = placeholder else { self.attributedPlaceholder = NSAttributedString(string: "") return } let textRange = NSMakeRange(0, tmpText.characters.count) let attributedText = NSMutableAttributedString(string: tmpText) attributedText.addAttribute(NSForegroundColorAttributeName , value:UIColor(white:147.0/255.0, alpha:1.0), range: textRange) self.attributedPlaceholder = attributedText } } 

对于Swift

创buildUITextField扩展

 extension UITextField{ func setPlaceHolderColor(){ self.attributedPlaceholder = NSAttributedString(string: self.placeholder!, attributes: [NSForegroundColorAttributeName : UIColor.white]) } } 

为了解决这个问题,我通过在input顶部添加一个标签并添加了相等的宽度,相等的高度和中心的X / Y约束来解决这个问题。

然后,当文本的长度分别大于0或0时,我使用UITextField委托协议隐藏/显示此标签。 这可以使用文本字段中的Editing Changed IBAction来完成。

这增加了更多定制选项的好处,而不仅仅是文本颜色。 这也意味着游标将不会被占位符文本所抵消,然后当您键入第一个字符时,将其移动到string的开头,这让我感到很烦恼。

对于Swift

 func setPlaceholderColor(textField: UITextField, placeholderText: String) { textField.attributedPlaceholder = NSAttributedString(string: placeholderText, attributes: [NSForegroundColorAttributeName: UIColor.pelorBlack]) } 

你可以用这个

 self.setPlaceholderColor(textField: self.emailTextField, placeholderText: "E-Mail/Username") 

对于Swift 3和3.1,这个工作非常好:

 passField.attributedPlaceholder = NSAttributedString(string: "password", attributes: [NSForegroundColorAttributeName: UIColor.white]) 

这是更多关于个性化你的textField,但无论如何,我会分享从另一个页面得到的代码,并使其更好一点:

 import UIKit extension UITextField { func setBottomLine(borderColor: UIColor, fontColor: UIColor, placeHolderColor:UIColor, placeHolder: String) { self.borderStyle = UITextBorderStyle.none self.backgroundColor = UIColor.clear let borderLine = UIView() let height = 1.0 borderLine.frame = CGRect(x: 0, y: Double(self.frame.height) - height, width: Double(self.frame.width), height: height) self.textColor = fontColor borderLine.backgroundColor = borderColor self.addSubview(borderLine) self.attributedPlaceholder = NSAttributedString( string: placeHolder, attributes: [NSAttributedStringKey.foregroundColor: placeHolderColor] ) } } 

你可以像这样使用它:

 self.textField.setBottomLine(borderColor: lineColor, fontColor: fontColor, placeHolderColor: placeHolderColor, placeHolder: placeHolder) 

知道你有一个连接到ViewController的UITextField。

资料来源: http : //codepany.com/blog/swift-3-custom-uitextfield-with-single-line-input/

对于Swift 4.0,X-code 9.1版本或者iOS 11,您可以使用以下语法来使用不同的占位符颜色

 textField.attributedPlaceholder = NSAttributedString(string: "Placeholder Text", attributes: [NSAttributedStringKey.foregroundColor : UIColor.white]) 

使用这个来添加一个属性占位符:

 let attributes : [String : Any] = [ NSForegroundColorAttributeName: UIColor.lightGray, NSFontAttributeName : UIFont(name: "Helvetica Neue Light Italic", size: 12.0)! ] x_textfield.attributedPlaceholder = NSAttributedString(string: "Placeholder Text", attributes:attributes) 
 yourTextfield.attributedPlaceholder = NSAttributedString(string: "your placeholder text",attributes: [NSForegroundColorAttributeName: UIColor.white])