-
Swift 로 iOS 앱 만들기 - 06 : 스위프트 키보드 내리기 / lazy varSwift 2019. 7. 14. 18:18
다음과 같은 화면을 만들고
빈 화면을 클릭했을 때 와 키보드의 Return 버튼을 클릭했을 때, 키보드가 내려가는 것을 하고자한다.
1. UITextFieldDelegate 사용 (Delegate 개념 이해)
2. 예제 화면 코드 와 lazy var 설명
설명은 더보기를 클릭하여 볼 수 있다.
...더보기코드를 깔끔하게 작성하기 위해서 전 포스팅처럼 BaseViewController를 만들어주었고,
MainViewController 에서 각각의 button, label, textFeild를 생성하여 위치를 잡아주었다.
* lazy var
: 지연 변수, 간단하게 말하면 게으른 변수이다.
쉽게 설명하면 처음부터 보여주고 싶지않고 사용자가 어떤 행동을 했을 때만 보여주고 싶을 때 처음부터 만들어놓고 그걸 들고 다니면서 필요할 때 꺼내는 것은 자원 낭비다.(필요없는데 계속 들고 다녀야하니까)그래서 인스턴스화를 시키지 않고 넘어간 다음에, 나중에 그것을 처음으로 부르는 순간 (필요하다고 하는 순간) lazy var로 선언한 것을 인스턴스화 시키는 것이다.
그럼 왜 여기서 nameTextField 을 lazy var 로 선언했는가?
nameTextField 코드를 보면 아래와 같은 코드가 있다.
이 부분은 아까 설명했었는데 Delegate는 A의 일을 B가 대신 해주는 개념이라고 했다.
이때 대리자(위임자) 가 누구 인지 알려주어야한다. 즉 이 일을 받아서 처리할 객체가 누구인지 알려주어야 한다.
여기서 self는 위에서 말했듯이 뷰 컨트롤러이다.
nameTextField가 일을 시키면 그거 할 객체 = ViewController
그런데 문제는 코드는 위에서부터 내려오면서 버튼과 라벨, 그리고 텍스트 필드를 생성하고 있는 중이라
아직 viewDidLoad() 까지 가지 않았기 때문에, 클래스가 만들어지지 않았는데
여기서 갑자기
" 내 대리자는 ViewController 야."
라고 말하는 것이다!
즉, ViewController가 없는데 내 대리자는 ViewController이야 라고 말하기 때문에 오류가 난다.
- 따라서 lazy var 로 선언을 해서 처음에는 안 만들고
- 클래스의 인스턴스가 만들어져서 메모리가 로드가 된 후(viewDidLoad)
- addSubView 에서 nameTextField 를 보는 순간 다시 lazy var에 가서 그때 인스턴스화 시키는 것이다.
그 때는 이미 클래스가 인스턴스 화 된 이후라 대리자로 viewController를 지정할 수 있다.
3. Return 으로 키보드 내리기 (숨기기)
새로운 파일을 하나 만들고 그 파일에
extension(확장)으로 UITextFieldDelegate 를 코드를 작성한 MainViewController에 상속한다.
UITextFieldDelegate에 있는 여러가지 중 리턴 버튼을 눌렀을 때인 textFieldShouldReturn 을 선택하고
그 안에 '키보드를 내려라' 는 코드를 입력하면 된다.
textField.resignFirstResponder()
이때 resignFirstResponder은 textField가 본인의 firstRespon 을 버리라는 의미가 된다.
firstRespon는 이벤트 또는 동작 메시지를 수신하는 창의 첫 번째 응답자 객체이다.
대부분의 경우 firstRespon는 사용자가 마우스 나 키보드로 선택하거나 활성화 한 뷰 객체이다.
즉, 그 첫번째 응답자 객체에서 물러나라 라는 뜻이다.
4. 화면 터치로 키보드 내리기 (숨기기)
원하는 ViewController 에 이 코드를 추가해주면 빈 화면 (self.veiw)을 클릭했을 때 키보드가 내려간다.
-
* 본 글은 글쓴이가 스터디를 하고 배운 내용을 정리하는 식으로 쓰여지기 때문에 완전 초보자의 글입니다.
틀린 부분이 있을 수도 있고 글의 흐름이 일정하지 않을 수 있습니다.*-
'Swift' 카테고리의 다른 글
Swift - Delegate 정리 (1) 2019.07.14 Swift - viewDidLoad() 깔끔하게 쓰기 (0) 2019.07.13 Swift - ViewController Lifecycle (생명주기) 02 (2) 2019.07.08 Swift - View Controller Life Cycle (생명주기) (0) 2019.07.03 Swift 로 iOS 앱 만들기 - 05 : 코드로 view 생성하기 (Then 사용) (0) 2019.07.03