UITextField 占位符颜色

Posted

技术标签:

【中文标题】UITextField 占位符颜色【英文标题】:UITextField Placeholder Color 【发布时间】:2018-05-28 22:24:39 【问题描述】:

我完全意识到已经有多个答案。我添加了运行时属性。我还添加了一个 UITextField 扩展。占位符颜色仍然拒绝在模拟器和设备上更改。我没有通过情节提要设置占位符。通过从数据库中检索数据来设置占位符文本。为什么我的占位符颜色不会改变?

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

  
            func loadUserInfo()
        if let username = user.name
            self.nameLabel.text = username
            self.nameTextField.placeholder = username
           print(username)
        

【问题讨论】:

【参考方案1】:

你有一些问题。

您致电self.nameTextField.placeholder = username。这会清除您可能拥有的任何属性占位符,并恢复为默认颜色。您需要在设置placeholder 之后设置placeHolderColor 才能看到颜色。

get 用于您的 placeHolderColor 计算属性将导致无限递归,因为它调用 self.placeHolderColor 调用 getter 调用 self.placeHolderColor 调用 getter...

【讨论】:

所以我必须在设置占位符后在代码中设置每个文本字段,而不是通过扩展或界面构建器来设置? 或者你添加一些其他的自定义属性(或函数)到你的UITextField 扩展,让你设置占位符文本,同时保留已经设置的任何颜色。然后将self.nameTextField.placeholder = username 更改为self.nameTextField.myPlaceholder = username【参考方案2】:

在获取用户名后的 loadUserInfo 中我添加了self.nameTextField.attributedPlaceholder = NSAttributedString(string:user.name, attributes: [NSAttributedStringKey.foregroundColor: UIColor.green])

【讨论】:

这是对您问题的回答还是该问题的其他详细信息? 请注意,这会使您的 placeHolderColor 属性毫无意义。 是的,我删除了扩展和运行时属性,因为它毫无意义

以上是关于UITextField 占位符颜色的主要内容,如果未能解决你的问题,请参考以下文章

UITextField 中占位符文本的默认颜色是啥?

使用用户属性更改 UITextField 的占位符文本颜色?

有没有办法用 UIAppearance 设置 UITextField 的占位符颜色

如何更改 UITextField 的占位符颜色?

UITextField 在 iOS 中将占位符颜色设置为深色

UITextField 无法将占位符居中并更改键盘颜色书写