Swift 4中如何通过代码修改UITextField占位符颜色?
修改UITextField占位符颜色的几种简单方法
嘿,作为Swift新手碰到这个问题真的太正常了!我刚入门UIKit的时候也在这个小细节上卡过壳😅,其实有几种很直接的方式可以搞定,咱们一步步来:
方法一:直接设置attributedPlaceholder(最推荐给新手)
这是最简单直观的方法,不需要子类化,直接给UITextField的attributedPlaceholder属性赋值一个带颜色的富文本就行。
假设你已经有了UITextField的实例(不管是代码创建的,还是Storyboard关联的IBOutlet),直接写这段代码就行:
// 比如你的TextField叫myTextField,占位符文本是"请输入用户名" let placeholderText = "请输入用户名" // 定义占位符的属性,这里重点设置foregroundColor let placeholderAttributes: [NSAttributedString.Key: Any] = [ .foregroundColor: UIColor.systemGray2, // 换成你想要的颜色,比如UIColor.red .font: UIFont.systemFont(ofSize: 16) // 也可以顺便调整字体,可选 ] // 赋值给attributedPlaceholder myTextField.attributedPlaceholder = NSAttributedString(string: placeholderText, attributes: placeholderAttributes)
如果是用Storyboard的话,记得把这段代码放在viewDidLoad()里,确保TextField已经初始化完成。
方法二:子类化UITextField(适合需要复用的场景)
如果你有多个TextField都要改占位符颜色,子类化会更方便,不用重复写代码:
- 先创建一个自定义的TextField子类:
import UIKit class CustomPlaceholderTextField: UITextField { // 可以自定义一个属性,方便外部设置颜色 var placeholderColor: UIColor = .systemGray2 { didSet { // 颜色改变时重新绘制占位符 setNeedsDisplay() } } override func drawPlaceholder(in rect: CGRect) { guard let placeholder = placeholder else { return } // 绘制占位符时使用自定义颜色 placeholder.draw(in: rect, withAttributes: [ .foregroundColor: placeholderColor, .font: font ?? UIFont.systemFont(ofSize: 17) ]) } }
- 然后在Storyboard里,把你的TextField的Class改成
CustomPlaceholderTextField,或者代码里直接创建这个子类的实例:
let customTextField = CustomPlaceholderTextField(frame: CGRect(x: 20, y: 100, width: 300, height: 40)) customTextField.placeholder = "请输入内容" customTextField.placeholderColor = .orange view.addSubview(customTextField)
小提示
- 尽量用系统提供的自适应颜色(比如
systemGray2、systemPink),这样在浅色/深色模式下都能正常显示; - 如果用自定义颜色,记得在Asset里创建适配不同模式的颜色,或者用
UIColor(dynamicProvider:)来动态切换。
刚开始接触UIKit的这些小细节确实容易懵,多试两次就会发现其实很简单啦!
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

