Swift provides default placeholder property to UITextField but not to UITextView.
So if you need a multi-line editable text view, you don’t get a pretty placeholder. Here you will learn how to add placeholder text to UItextView.
Here we will show step by step:
Add the following code inside the extension:
Above code will work in both orientations.
Simply add placeholder to UITextView as below:
Get the full code here.
So if you need a multi-line editable text view, you don’t get a pretty placeholder. Here you will learn how to add placeholder text to UItextView.
Here we will show step by step:
Step 1:
Firstly create new swift file and name it TextViewPlaceholder.swift and save it.
Next import UIKit and create extension to UITextView as follow:
import UIKit
extension UITextView: UITextViewDelegate {
// Code
}
Step 2:
Here we are going to add label as subview in order to show placeholder text. No worries it's quite simple.Add the following code inside the extension:
override open var bounds: CGRect {
didSet {
self.resizePlaceholder()
}
}
public var placeholder: String? {
get {
var placeholderText: String?
if let placeholderLbl = self.viewWithTag(50) as? UILabel {
placeholderText = placeholderLbl.text
}
return placeholderText
}
set {
if let placeholderLbl = self.viewWithTag(50) as! UILabel? {
placeholderLbl.text = newValue
placeholderLbl.sizeToFit()
} else {
self.addPlaceholder(newValue!)
}
}
}
public func textViewDidChange(_ textView: UITextView) {
if let placeholderLbl = self.viewWithTag(50) as? UILabel {
placeholderLbl.isHidden = self.text.characters.count > 0
}
}
private func resizePlaceholder() {
if let placeholderLbl = self.viewWithTag(50) as! UILabel? {
let x = self.textContainer.lineFragmentPadding
let y = self.textContainerInset.top - 2
let width = self.frame.width - (x * 2)
let height = placeholderLbl.frame.height
placeholderLbl.frame = CGRect(x: x, y: y, width: width, height: height)
}
}
private func addPlaceholder(_ placeholderText: String) {
let placeholderLbl = UILabel()
placeholderLbl.text = placeholderText
placeholderLbl.sizeToFit()
placeholderLbl.font = self.font
placeholderLbl.textColor = UIColor.lightGray
placeholderLbl.tag = 50
placeholderLbl.isHidden = self.text.characters.count > 0
self.addSubview(placeholderLbl)
self.resizePlaceholder()
self.delegate = self
}
Above code will work in both orientations.
Step 3:
Here we will show how to use.Simply add placeholder to UITextView as below:
let textView = UITextView() textView.placeholder = "Start typing here"
Get the full code here.




































