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 |