본문 바로가기
iOS

[iOS/Swift] UITextView에 placeholder 적용하기

by 코코종 2022. 2. 18.

안녕하세요! 코코종입니당 ><

오늘은 placeholder를 쓰려고 하는데 UITextView에는 해당 기능이 없다는 충격(?)적인 사실을 알아서 글을 쓰러 왔습니당

 

다들 아시겠지만..! UITextField를 사용할 때 우리는 placeholder를 주로 사용했습니다

text를 입력하기 전에 미리 어떤 정보를 필요로 하는지 유저로 하여금 쉽게 이해하기 위함인데요! 아래와 같은 예시가 있습니다(쨍한 노란색은 무시하고 넘어가세요^^...)

 

혹시나 한 번도 이걸 못 봤다면 대체 몇 세기에 살고 계신겁니까...

 

그런데 UITextField의 치명적인 단점이 있다는 사실 아시나요? 그것은 바로 단 한줄만 입력을 받을 수 있다는거!! 안드로이드에서는 EditText로 쓰고 hint로 가능했는데 말이죠(그래도 안드보다 iOS가 더 좋습니다 충성충성 ^^7)

 

다음 줄 쓰는거 외않됀데?

 


 

그런데 오늘은 채팅 화면에서 메세지를 보내는 View를 그리는데 채팅은 한 줄이 아니라 막 엔터로 여러 줄이 입력이 가능하잖아요?

그래서 UITextView를 썼는데 얘는 placeholder가 없더라구요! 그래서 어떻게 할까 고민을 하다가 검색을 해봤는데 생각했던 것과 비슷한 내용의 글이 있더라구요 참고 블로그 

 

간단히 아이디어를 소개하자면.

1. 먼저 placeholder로 쓸 text를 미리 기입해두고

2. delegate를 이용해서 editing이 시작 될 때, 끝날 때 처리를 해준다

 

코드로 한 번 보시죠!

// 미리 placeholder의 내용을 추가하고 회색으로 처리
let chatView = ChattingView().then {
    $0.textView.text = "메세지를 입력하세요"
    $0.textView.textColor = UIColor.lightGray
}

// delegate를 처리
 override func viewDidLoad() {
    super.viewDidLoad()
    chatView.textView.delegate = self
 }
 
 extension HomeChattingViewController: UITextViewDelegate {
    
    func textViewDidBeginEditing(_ textView: UITextView) {
    // TextColor로 처리합니다. text로 처리하게 된다면 placeholder와 같은걸 써버리면 동작이 이상하겠죠?
        if textView.textColor == UIColor.lightGray { 
            textView.text = nil // 텍스트를 날려줌
            textView.textColor = UIColor.black
        }
        
    }
    // UITextView의 placeholder
    func textViewDidEndEditing(_ textView: UITextView) {
        if textView.text.isEmpty {
            textView.text = "메세지를 입력하세요"
            textView.textColor = UIColor.lightGray
        }
    }
    
}

 

placeholder가 나타난 모습

 

UiTextView 인증!

 


오늘은 delegate를 이용해서 UITextView에 placeholer를 적용하는 방법을 알아봤습니다!

도움이 많이 되셨길 바라면서 저는 이만~!