[Apple] UIResponder

J.Noma·2021년 12월 29일
0

iOS : 이벤트 처리

목록 보기
7/8

Apple문서: UIResponder


Overview

Responder란?
Responder 객체(UIResponder의 인스턴스)는 UIKit을 사용하는 App의 event 처리 과정의 뼈대를 구성합니다. UIApplication/UIViewController/UIView/UIWindow 같은 많은 핵심 객체들도 responder입니다. event가 발생하면 처리를 위해 UIKit이 이 event들을 responder에게 보냅니다

어떤 타입의 event에 반응하고 싶다면, 대응되는 메서드를 override/구현하면 된다
event에는 여러 종류가 있습니다(터치, 모션, remote-control, press 등). 만약 어떤 타입의 event를 처리하고 싶다면 해당 타입과 대응되는 메서드들을 responder가 override해야 합니다. 예로, 터치 event를 처리하기 위해서는 touchesBegan()/touchesMoved()/touchesEnded()/touchesCancelled() 메서드들을 responder가 구현해야 합니다. 즉, 터치의 경우, responder는 터치의 변화를 추적하고 UI를 적절히 업데이트하기 위해, UIKit이 제공하는 event 정보를 사용합니다

Responder chain
event를 처리하는 것에 더해, UIKit responder는 처리되지 않은 event를 다른 객체에게 넘기는 작업도 관리한다. 만약 event 처리를 맡은 responder가 이를 처리하지 않는다면, responder chain에 따라 다음 responder에게 event 처리를 위임합니다. 누구에게 이 event를 위임해야 할지에 대해서는 어느정도 미리 정의된 rule이 존재합니다. UIKit은 이 rule을 사용하여 responder chain을 동적으로 관리합니다. 예로, view는 superview에게 event를 넘기고, root view는 뷰컨에게 넘기게 되어 있습니다

input view 처리
Responder는 UIEvent 객체를 처리할 뿐 아니라 input view를 통해 입력되는 custom input도 수용할 수 있습니다. input view의 가장 대표적인 예시로 시스템 키보드가 있습니다. 유저가 화면에 있는 UITextField/UITextView를 tap할 때, 해당 view는 first responder가 되며 input view(여기선, 시스템 키보드)를 화면에 띄웁니다. 유사하게, 우리가 custom input view를 만들어서 다른 어떤 responder가 활성화될 때 화면에 띄워지게 할 수도 있습니다. responder와 input view를 연결하기 위해서는, responder의 inputView 프로퍼티를 view에 할당하면 됩니다

profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe

0개의 댓글