今回は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をタップしキーボードを表示させた時の挙動に関しては記載しておりません。)