本文参考了史上最全的iOS之UITextView实现placeHolder占位文字的N种方法,从中选出了我认为最省事的一种方法,尽量最简化,代码如下:
class CustomTextView: UITextView {
private var _placeholder:String!
init(frame:CGRect,placeholder:String) {
super.init(frame: frame, textContainer: nil)
_placeholder = placeholder
NotificationCenter.default.addObserver(self, selector: #selector(textDidChange), name: .UITextViewTextDidChange, object: self)//观察是否有文字输入
}
override func draw(_ rect: CGRect) {
if hasText{
return//如果输入框内有文字,直接返回
}
_placeholder.draw(in: CGRect(x:5,y:7,width:rect.width-10,height:rect.height), withAttributes: [NSForegroundColorAttributeName:UIColor.yellow,NSFontAttributeName:UIFont.systemFont(ofSize: 14)])//占位符的位置坐标,字体大小以及绘制区域大小,如果你对占位符的大小和位置不满意,请在这修改
}
func textDidChange(){
setNeedsDisplay()//调用drawRect方法,不能手动调用drawRect方法
}
deinit {
NotificationCenter.default.removeObserver(self)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
///////////////////////
override func viewDidLoad() {
super.viewDidLoad()
let textView = CustomTextView(frame: CGRect(x: 100, y: 100, width: 100, height: 100),placeholder:"我是占位符")
textView.backgroundColor = UIColor.brown
view.addSubview(textView)
}
11.gif
是不是狠简单
网友评论