[TIL] TextView는 placeholder가 없다면서?

한철희·2024년 8월 14일
0

TIL

목록 보기
54/57

1. 뭐가 문제인가요?

우리는 다음과 같은 화면을 구현해야했다.

사용자가 원하는 구절을 입력할 수 있도록 공간을 제공해주는 것이다.
처음에는 textfield를 생각했다.

textfield에는 기본적으로 placeholder기능을 제공하기 때문이다

TextField.placeholder = "플레이스홀더"

이런식으로 하면 기본 메서드로 이용할 수 있다.
그러나 textfield는 한줄 입력만 제공한다...
아무리 많은 입력을 해도 한줄로만 길게 표시해준다
결국 우리가 원하는 기능과 달라서 textview를 사용하기로 했다.

근데 여기서 문제가 발생한다
textview는 기본적으로 placeholder 을 제공하지 않는다..!

하지만 다행히 placeholder를 구현하는 방법이 존재한다!


2. 그래서 어떻게 하는데요?

기본적인 방법은 다음과 같습니다

  • view.text로 placeholder로 쓸 문장을 미리 작성
  • delegate를 통해 상황에 맞게 처리 해주기
	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가 빈 칸일때의
처리를 해줬습니다.


참고포스팅

참고포스팅1

profile
초보 개발자 살아남기

0개의 댓글