우리는 다음과 같은 화면을 구현해야했다.
사용자가 원하는 구절을 입력할 수 있도록 공간을 제공해주는 것이다.
처음에는 textfield
를 생각했다.
textfield
에는 기본적으로 placeholder기능을 제공하기 때문이다
TextField.placeholder = "플레이스홀더"
이런식으로 하면 기본 메서드로 이용할 수 있다.
그러나 textfield
는 한줄 입력만 제공한다...
아무리 많은 입력을 해도 한줄로만 길게 표시해준다
결국 우리가 원하는 기능과 달라서 textview
를 사용하기로 했다.
근데 여기서 문제가 발생한다
textview
는 기본적으로 placeholder 을 제공하지 않는다..!
하지만 다행히 placeholder를 구현하는 방법이 존재한다!
기본적인 방법은 다음과 같습니다
view.text
로 placeholder로 쓸 문장을 미리 작성 lazy var verseTextField: UITextView = {
let view = UITextView()
view.text = "텍스트를 입력하세요"
view.font = .systemFont(ofSize: 14)
view.textColor = .placeholderText
view.delegate = self
return view
}()
가장 기본적인 예시코드를 가져왔다.
UITextView
를 선언하고, placeholder를 설정한 코드다.
그리고 이제 delegate를 통해서 입력이 시작될 때, textview
가 빈칸이 되었을 때의 처리를 해줘야한다.
// MARK: - 텍스트뷰 placeholder
extension AddPassageViewController: UITextViewDelegate {
func textViewDidBeginEditing(_ textView: UITextView) {
if textView.textColor == .textFieldGray {
textView.text = nil
textView.textColor = .black
}
}
func textViewDidEndEditing(_ textView: UITextView) {
if textView.text.isEmpty {
textView.text = "텍스트를 입력하세요"
textView.textColor = .textFieldGray
}
}
}
이런식입니다!
입력을 시작할 때, 입력이 끝나고 TextView
가 빈 칸일때의
처리를 해줬습니다.