今回はUITextFieldには初めからあるにも関わらず、UITextViewにはないPlaceHolderを表示させる方法をソースコードとともに記載いたします。
手っ取り早く、、実装するためのソースコードは下記のようになります。
class CustomTextView: UITextView{
lazy var placeHolder: UILabel = UILabel()
var placeHolderColor: UIColor = .lightGray
var placeHolderStr : NSString = ""
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
...
}
deinit {
NotificationCenter.default.removeObserver(self)
}
init() {
super.init(frame: {初期化時のViewの大きさ}, textContainer: nil)
...
}
override public func draw(_ rect: CGRect) {
if(self.placeHolder.length > 0) {
self.placeHolderLabel.frame = CGRect(x: 8.0, y: 8.0, width: self.bounds.size.width - 10.0, height: self.bounds.size.height)
self.placeHolderLabel.lineBreakMode = NSLineBreakMode.byWordWrapping
self.placeHolderLabel.numberOfLines = 0
self.placeHolderLabel.font = UIFont(name: "GillSans-bold", size: 25.0)
self.placeHolder.backgroundColor = .clear
self.placeHolder.textColor = self.placeHolderColor
self.placeHolder.alpha = 0
self.placeHolder.tag = 1
self.placeHolder.textAlignment = .center
self.placeHolder.layer.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2)
self.placeHolder.text = self.placeHolderStr as String
self.addSubview(placeHolder)
}
self.sendSubview(toBack: placeHolder)
if (self.text.utf16.count == 0 && self.placeHolderStr.length > 0){
self.viewWithTag(1)?.alpha = 1
}
super.draw(rect)
}
...
...
}
後は、上記のコードにて作成したクラスを用いたいUIViewController、もしくはUIViewで宣言し、addSubView()をして頂ければ、PlaceHolderを実装したUITextViewを表示させる事が出来ます。
(ただし、上記のコードに文字を入力時、もしくは該当UITextViewをタップしキーボードを表示させた時の挙動に関しては記載しておりません。)
![【Swift】[26]UIButtonのカスタマイズ 【Swift】[26]UIButtonのカスタマイズ](https://ediienote.com/Wp_ediieNote/wp-content/uploads/2018/11/ce1a897c25a5db2509a0f35582aa5524-480x320.png)