2016-10-07 41 views
0

这里是我的UITextField子类的简单化下来的版本:无法设置归因占位符的文本颜色的子类的UITextField

class MyTextField: UITextField { 

    override func drawPlaceholder(in rect: CGRect) { 
     if let placeholder = self.placeholder { 
      print(placeholder) // -> prints the value 
      let attributes = [NSForegroundColorAttributeName: UIColor.red] 
      self.attributedPlaceholder = NSAttributedString(string: placeholder, attributes: attributes) 
     } 
    } 
} 

在IB,文本字段被分配到我的子类,但它不会不管我把它作为“普通”或“归因”,字体,颜色等。我给它一个初始占位符值,但是当我运行该应用程序时,它只是空白。有什么建议么?

回答

1

您覆盖了drawPlaceholder方法,而不是调用super。而您的替换代码不会尝试实际绘制占位符文本。因此占位符永远不会出现。

为什么不重写placeholder属性的setter,以便根据需要设置attributedPlaceholder。那么你不需要重写drawPlaceholder,一切都会工作。

+0

我是不是试图用这一行来绘制''属性'Placeholder'? 'self.attributedPlaceholder = NSAttributedString(string:placeholder,attributes:attributes)' – Aaron

+0

根本不是。该代码只是设置属性,但不执行任何绘图。该绘图通常在'drawPlaceholder'方法中完成,但您正在阻止该代码运行。 – rmaddy

+0

对“super”的调用是修复。空头的错误。我不知道如何实现在'placeholder'属性的重写中设置'属性Placeholder',但感谢您的建议! – Aaron

相关问题