I have a UITextView
that has a placeholder similar to Twitter's create post screen.
I have implemented the below code however, I am experiencing the below, unexpected behavior:
UITextView
capitalizes the second letter in the text after typing- Placeholder not visible on
viewDidLoad
NOTE: This is all in a CollectionReusableView
CODE
lazy var textView: UITextView = {
let view = UITextView()
view.translatesAutoresizingMaskIntoConstraints = false
view.delegate = self
view.text = "What's happening?"
view.textColor = .lightGray
view.textContainerInset = .zero
view.textContainer.lineFragmentPadding = 0.0
view.font = UIFont.systemFont(ofSize: 20)
return view
}()
func textViewDidBeginEditing(_ textView: UITextView) {
if textView.textColor == UIColor.lightGray {
textView.text = nil
textView.textColor = .label
}
}
func textViewDidEndEditing(_ textView: UITextView) {
if textView.text.isEmpty {
textView.text = "What's happening?"
textView.textColor = UIColor.lightGray
}
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let currentText: String = textView.text
let updatedText = (currentText as NSString).replacingCharacters(in: range, with: text)
if updatedText.isEmpty {
textView.text = "What's happening?"
textView.textColor = .lightGray
textView.selectedTextRange = textView.textRange(from: textView.beginningOfDocument, to: textView.beginningOfDocument)
} else if textView.textColor == UIColor.lightGray && !text.isEmpty {
textView.textColor = .label
textView.text = text
}
else {
return true
}
return false
}
func textViewDidChangeSelection(_ textView: UITextView) {
if textView.textColor == UIColor.lightGray {
textView.selectedTextRange = textView.textRange(from: textView.beginningOfDocument, to: textView.beginningOfDocument)
}
}