728x90
반응형

TextField 는 아이디나 비밀번호 입력을 받을때 사용하고

 

TextView는 HTML의 TextArea처럼 긴 글을 입력 받을 때 사용합니다.

 

 

 

 

TextField와 SearchBar는 입력을 한줄로 받기 때문에 PlaceHolder를 설정하여 입력설명을 적을수 있지만.

 

TextView는 별도의 기능을 지원하지 않습니다.

 

 

 

 

그래서 UITextViewDelegate를 준수해서 커스텀을 해야 PlaceHolder 처럼 구현을 할 수 있습니다.

 

Storyboard에서 TextView를 마우스 우클릭해서 컨트롤러에 연결하고 Delegate를 선택해도 되고.

 

override func viewDidLoad() {
    textView.delegate = self
}

 

 

위 처럼 소스 코드로 나 자신이 UITextViewDelegate를 준수하고 있다고 설정해줘도 됩니다.

extension MainViewController: UITextViewDelegate {
    
    // 편집이 시작될때
    func textViewDidBeginEditing(_ textView: UITextView) {
        textViewSetupView()
    }
    
    // 편집이 종료될때
    func textViewDidEndEditing(_ textView: UITextView) {
        if textView.text == "" {
            textViewSetupView()
        }
    }
    
    // 텍스트가 입력될때
    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        // 개행시 최초 응답자 제거
        if text == "\n" {
            textView.resignFirstResponder()
        }
        return true
    }
}
 

 

 

 

 

편집이 시작될 때와 종료 되었을대 textViewSetupView 함수를 호출하도록 하였습니다.

 

현재 텍스트가 '내용입력' 이면 내용을 지우고 입력받을 수 있도록 글씨 색도 검정으로 바꿔주었고,

 

내용이 비어있을때에는 PlaceHolder 처럼 글씨는 회색으로 변경하고 '내용입력'을 넣어주었습니다.

// UITextView PlaceHolder 설정
    func textViewSetupView() {
        if textView.text == "내용입력" {
            textView.text = ""
            textView.textColor = UIColor.black
            
        } else if textView.text == "" {
            textView.text = "내용입력"
            textView.textColor = UIColor.lightGray
        }
    }

 

 

 

 

 

 

텍스트가 바뀔때에는 개행인지 판단하여 응답자를 없애줘서 포커스를 지워줍니다.

 

그러면 키보드도 자동으로 내려갑니다.

 

위와 같이 간단하게 TextView도 PlaceHolder처럼 커스텀해서 사용할 수 있습니다.

 

728x90
반응형

'프로그래밍 > iOS' 카테고리의 다른 글

Swift 4 UIRefreshControl  (0) 2019.03.04
Swift 4 TableViewCell SwipeAction  (0) 2019.02.21
Swift 4 WKWebView 로딩(Indicator)  (0) 2019.02.20
Swift 4 WKWebView  (0) 2019.02.20
Swift 4 TableView 이미지 비동기 처리  (0) 2019.02.20

+ Recent posts