iOS 개발을 하다보면 텍스트 필드를 누르고 키보드창이 올라와서 텍스트 필드의 내용을 확인을 못할 때가 있습니다.
그래서 일단 예시로!! 극단적으로 텍스트 필드를 하단에 둬봤습니다..
내 텍스트필드 어디갔어....
생각..
일단 생각하기로
- 일단 텍스트 뷰를 누르고 키보드가 올라올 때 뷰도 같이 올려줘야하고
- 키보드를 endEditing이나 resignFirstrespond메서드로 내렸을때도 내려줘야 합니다.
텍스트 필드를 눌렸을 때 키보드가 올라오는 기능은 iOS 자체 기능이기 때문에 방법이 있을거라 생각합니다.
delegate 같은 걸 쓰나?!?!
어떻게 하냐!!
NotificationCenter 사용!!
예약된 옵저버들에게 정보를 broadcast 가능하게 해주는 알림 발송 메카니즘이다.
addObserver 메서드를 사용해서 NSNotification objects들을 감시하는 객체를 만든다..? 정도만 생각하죠.ㅎ
그리고 싱글톤으로.. 구성되어 있습니다.
addObserver해주기!!
self = viewController일 것이고.
selector는 name에 넣은 상태 발생시 실행시킬 메서드!이구..
name은 UIResponder.키보드 변화?!? willShow와 willHide입니다.
UIResponder 예전에 firstResponder나 touch 이벤트 등에서 썼었는데.. 여러 간단한 이벤트들을 넣어논 것 같습니다.
UIResponder에서 시스템 키보드도 관리하는 것 같습니다.
NotificationCenter에서 NSNotification을 파리미터로 주는 것 같습니다. 키보드의 길이를 구해서 뷰를 변경할 것입니다.
실행 해볼까요!!
파리미터로 받아오는 NSNotification이 궁금해서 print 해봤습니다.
keyboard에 관한 notification이어서 keyboard정보와 파라미터로 name을 썻던.. 그 name이 나오네요.
애니메이션 관련 변수도 있습니다. 아 그래서 키보드나 textField가 애니메이션처럼 움직이는게 보이는건가...
키보드 길이 구하는 방법
NSRect로 되어있는 FrameEndUserInfokey를 NSValue로 바꾸고 CGRect로 바꾸고.. height를 추출합니다...
(뭐이리 타입형을 많이 바꿔....)
생각
- removeObserver를 꼭 해줘야 하나...?싱글톤이라서 메모리에 계속 있게 되서 해줘야 한다곤 하는데;;?!
- name을 이용해서 함수를 하나로 해서 name별로 다르게 동작해도 될 것같습니다.
- 시스템 키보드는 UIResponder, notification object이고 그를 감시하는 notificationCenter의 옵저버랄까...?! 뭔소리;
'iOS' 카테고리의 다른 글
[Swift] Swift 버전에 대해.. (+Xcode) (0) | 2021.05.04 |
---|---|
[iOS] SwiftLint 사용 (1) | 2021.05.04 |
[iOS] DispatchGroup, DispatchItem, DispatchSemaphore (0) | 2021.04.10 |
[iOS] Dispatch Queue 종류 (0) | 2021.04.10 |
[iOS]동시성 프로그래밍, GCD, 동기, 비동기, 직렬성 (0) | 2021.04.10 |