Udemy iOS by Angela Yu / Section 13 / UITextField

Garam·2023년 7월 4일
0

Udemy iOS by Angela Yu

목록 보기
7/9
post-thumbnail

Text Field


유저가 키보드로 값을 입력할 수 있게 하는 기능.

Attributes Inspector에서
단어 첫 글자를 자동으로 대문자로 변환하거나
암호 등을 입력할 때 보이지 않게 하는 기능 등을
다양하게 설정할 수 있다.
참고로 Return Key는
키보드에서 Go를 누르면 값을 Return해줄 수 있는 기능인 것 같다.



Placeholder = the reminder for the user




돋보기 버튼을 누르면
입력한 값을 print하기 위해서
위와 같은 코드를 입력해보자.
(searchTextField가 Optional인 이유는
유저의 입력값이 비어있을 수도 있기 때문이다)

그런데 시뮬레이터를 돌려본 결과
돋보기버튼을 누르면 프린트가 되지만
키보드의 go버튼을 누르면 아무런 반응이 없다.


유저는 저 돋보기 버튼과 go버튼이
같은 기능을 할 것이라고 예측할것이기 때문에
go버튼을 눌러도 똑같은 결과를 도출할 수 있도록 만들어야 한다.



먼저 class에 UITextFieldDelegate를 입력해준다.
이를 입력해줌으로써 WeatherViewController 클래스가
텍스트의 편집을 주관할 수 있도록 해준다.



또한 viewDidLoad에
해당 코드를 삽입해준다.
이로써 Text Field는 우리의 View Controller에게
유저의 행동(입력 시작, 입력 끝 등)을 report back해줄 수있다.


View Controller가 Text Field의 이러한 보고를 받기 위해서는
View Controller를 delegate으로 설정해주어야 한다.
(self = View Controller)


아직 delegate의 개념이 100% 이해되지는 않지만
서치해보니 다른 개념들도 익혀야 이해할 수 있을 것 같아서
일단은 넘어가야할 것 같다.




이후 해당 함수(Delegate Method)를 삽입해주면
원하는 결과를 도출할 수 있게 된다.


(현재 Return Key가 go로 설정되어있으므로,
go 버튼을 통해 print함수를 도출하기 위해서는
Return이 되어야만 하니까!
이해하면 쉬운데 여기서 좀 헤맸다)



또한 돋보기 버튼, 고 버튼을 누르면
키보드가 사라지게 하기 위해서
(입력을 중지하기 위해서)
endEditing(true)값을 입력해준다.



돋보기, 고 버튼을 눌러서 서치를 완료했을 때
입력했던 텍스트가 사라지게 하려면
위와 같은 Delegate Method를 삽입한다.



유저가 아무것도 입력하지 않았을 때
placeholder를 변경하여
값을 입력하도록 촉구하는 메소드.

이 메소드는 왜 다른 메소드들과 다르게
searchTextField로 특정하지 않고
textField를 사용했을까?

textFieldShouldEndEditing 메소드는
우리가 따로 코드를 작성해서 호출한게 아니라
Text Field에 의하여 호출된 것이다.

그리고 Text Field가 textFieldShouldEndEditing를 호출했을때,
유저가 키보드를 dismiss하는 순간
그것은 메소드를 호출한 Text Field에게 reference를 전달한다.

만약 여러개의 텍스트필드가 가정했을 때
그것들은 동일한 delegate 메소드를 호출할 것이고,
우리는 어떤 Text Field가 메소드를 호출했던 상관없이,
Text Field 변수를 통해 전달된 identity를 적용할 수 있다.

따라서 search 버튼을 누르던 go 버튼을 누르던 상관없이
우리는 textField.text의 property를 알 수 있게 된다.

-> 이 부분의 개념이 너무 이해가 안돼서
전체를 받아쓰기 해서 읽고 또 읽고
한국어로 옮겨도 보았건만
아직도 이해가 되지 않는다...
다음 개념을 배우면 좀 더 이해가 될까?
하 ㅜㅜ 나 자신이 바보같아서 답답하다...




0개의 댓글