UIKit - UITextField 여러 줄 입력 불가능한 이슈 UITextView를 통해 해결하기
UIKit - UITextField 여러 줄 입력 불가능한 이슈 UITextView를 통해 해결하기
UITextField를 통해 입력 필드를 구현한 후 테스트 도중 아래와 같은 이슈를 발견함…
위 화면처럼 글자가 아래로 내려가지 않고 옆으로만 계속 작성되고 있음.
알아본 결과 UITextField는 여러 줄이 아닌 한 줄로만 입력을 받을 수 있다고 함.
따라서, UITextField 대신 UITextView를 통해 처리해줘야함.
UITextField와는 크게 다르지 않으나, placeholder를 제공해주지 않기 때문에 직접 Delegate 메서드를 구현해서 처리해줘야함.
TodoAddView.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import UIKit
class TodoAddView: UIView {
...
// MARK: - 할일 세부 사항(또는 메모) 텍스트 뷰
let todoDescriptionTextView: UITextView = {
let textView = UITextView()
textView.backgroundColor = UIColor(named: "textFieldColor")
textView.font = UIFont.systemFont(ofSize: 17)
// placeholder가 제공되지 않기 때문에 text에 설정 후 Delegate로 처리
textView.text = Constant.DESCRIPTION_PLACEHOLDER
textView.textColor = .createdDate
textView.layer.borderColor = UIColor.gray.cgColor
textView.layer.borderWidth = 0.3
textView.clipsToBounds = true
textView.layer.cornerRadius = 8
textView.translatesAutoresizingMaskIntoConstraints = false
return textView
}()
...
// MVC 패턴을 적용하여 View와 Controller가 분리되어 있기 때문에 Controller에서 넘겨줄 수 있도록 메서드를 만듬
func setTextViewDelegate(delegate: UITextViewDelegate){
todoDescriptionTextView.delegate = delegate
}
}
TodoAddViewController.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import UIKit
class TodoAddViewController: UIViewController {
// View 인스턴스 생성
let todoAddView = TodoAddView()
override func loadView() {
// loadView 시점에 View 설정
self.view = todoAddView
}
override func viewDidLoad() {
super.viewDidLoad()
// Delegate 설정
todoAddView.setTextViewDelegate(delegate: self)
setupNavigation()
}
...
}
// MARK: - TextView Delegate
extension TodoAddViewController: UITextViewDelegate{
// TextView가 focus를 얻는 경우 실행됨
func textViewDidBeginEditing(_ textView: UITextView) {
if textView.text == Constant.DESCRIPTION_PLACEHOLDER {
textView.text = nil
textView.textColor = .white
}
}
// TextView가 focus를 잃는 경우 실행됨
func textViewDidEndEditing(_ textView: UITextView) {
if textView.text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty{
textView.text = Constant.DESCRIPTION_PLACEHOLDER
textView.textColor = .createdDate
}
}
}
결과
Reference
This post is licensed under CC BY 4.0 by the author.

