用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])