Responder Chain 구조에 대해 설명하고, First Responder 역할에 대해 설명하시오.
Opened this issue · 3 comments
Responder Chain은 이벤트가 발생한 뷰에서 상위 뷰로 상위 뷰에서 상위 뷰로 상위 뷰에서 상위 뷰컨트롤러로 상위 뷰컨트롤러에서 UIApplication으로 UIApplication에서 UIApplicationDelegate로 연결되는 구조입니다.
First Responder는 이벤트가 발생했을 때 가장 먼저 이벤트를 받게 되는 Responder입니다.
UIKit은 이벤트가 발생하면 발생한 이벤트를 First Responder에게 전달하고, First Responder는 받은 이벤트를 처리합니다. First Responder가 이벤트를 처리하지 않으면 다음 Responder에게 이벤트를 전달하고 다음 Responder가 이벤트를 처리하지 않으면 또 다른 Responder에게 이벤트를 전달하게 됩니다.
일단 Responder는 이벤트를 핸들링하고 이벤트에 반응할 수 있는 객체를 말합니다. UIApplication, UIView 들을 포함한 많은 주요 객체들 또한 responder 입니다. 이벤트가 발생하면 , UIKit 은 이벤트 핸들링을 위해 해당 이벤트를 앱의 responder 객체들에게 보냅니다.
Responder Chain 은 responder 객체들이 이벤트나 액션메세지를 핸들링할 책임을 앱의 다른 객체들에게 전송할 수 있도록 해줍니다. 특정 정해진 responder가 이벤트를 핸들링하지 않을 경우, 해당 reponder는 그 이벤트를 reponder chain의 다음 객체에게로 포워딩하고 처리가 될때까지 계속 chain의 상위 객체들로 이동합니다. 마지막까지 처리되지 않을 경우, 앱이 해당 메시지를 버립니다.
First Responder 는 앱에서 많은 종류의 이벤트를 처음으로 받는 reponder 로 이벤트를 받기 위해서는, responder는 자신이 first responder가 될 수 있음을 나타내야 합니다. first responder가 될 수 있게 하려면, UIResponder
의 서브클래스에서 canBecomeFirstResponder
프로퍼티를 오버라이드하여 true를 리턴하도록 만들어야 합니다.
UIResponder 객체(UIView, UIViewController, UIApplication)는 이벤트를 전달받으면 이를 직접 처리하거나 다른 responder에게 전달합니다. 이 때 가장 먼저 이벤트를 전달받는 객체가 First Responder입니다. 그리고 연쇄적으로 다른 responder에게 전달되는 과정을 Responder chain이라고 합니다. Responder chain은 뷰 계층의 상태에 따라 자동으로 구성됩니다. 따라서 First Responder는 이벤트를 처음으로 전달받고 이를 처리하거나 다른 Responder에게 전달하는 역할을 합니다.
cf. 이벤트 종류에 따른 First Responder
터치 이벤트: 터치가 발생한 뷰
프레스 이벤트: 포커스를 가진 뷰
흔들기 이벤트: 사용자나 UIKit이 지정한 뷰
원격 이벤트: 사용자나 UIKit이 지정한 뷰
편집 메뉴 이벤트: 사용자나 UIKit이 지정한 뷰