【Swift】[7]UITextViewにPlace Holderを表示させる方法

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です