UITextField有placeholder屬性很方便催植,UITextView沒(méi)有,我們可以繼承重寫(xiě)drawRect方法,不啰嗦 直接上代碼,字體大小可以自己定義看需要吧(歡迎指出不當(dāng)之處)
import UIKit
class HZTextView: UITextView {
/// 占位文字
var placeholder: String?
/// 占位文字顏色
var placeholderColor: UIColor? = UIColor.lightGray
override init(frame: CGRect, textContainer: NSTextContainer?) {
super.init(frame: frame, textContainer: textContainer)
// 設(shè)置默認(rèn)字體
self.font = UIFont.systemFont(ofSize: 15)
// 使用通知監(jiān)聽(tīng)文字改變
NotificationCenter.default.addObserver(self, selector: #selector(textDidChange(_:)), name: UITextView.textDidChangeNotification, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(_ rect: CGRect) {
// 如果有文字,就直接返回,不需要畫(huà)占位文字
if self.hasText {
return
}
// 屬性
let attrs: [NSAttributedString.Key : Any] = [NSAttributedString.Key.foregroundColor: self.placeholderColor as Any, NSAttributedString.Key.font: self.font!]
// 文字
var rect1 = rect
rect1.origin.x = 5
rect1.origin.y = 8
rect1.size.width = rect1.size.width - 2*rect1.origin.x
(self.placeholder! as NSString).draw(in: rect1, withAttributes: attrs)
}
@objc func textDidChange(_ note: Notification) {
// 會(huì)重新調(diào)用drawRect:方法
self.setNeedsDisplay()
}