Responder Chain

velog_ghost·2022년 7월 28일
0

[SeSAC] TIL📚

목록 보기
13/19

Responder Chain(리스폰더 체인)


Responder Chain은 리스폰더 오브젝트들이 동적으로 구성된 이벤트 전달 체인임

  • 이때 리스폰더 오브젝트란 UIResponder의 클래스의 인스턴스를 가르킨다. : ex) UIView, UIViewController 등
  • 리스폰더는 Event Raw Data를 받을 수 있음

  • 리스폰더가 이벤트를 받았다면?
    이벤트 -> 리스폰더 -> 직접 처리한다 or 다음 순서의 리스폰더로 전달

  • 즉 주어진 리스폰더가 일을 직접 처리하지 못한다면, 다음 순서의 리스폰더로 전달하고, 그 리스폰더가 또 직접 처리하지 못한다면 다음으로 계속 넘어가는 형식을 Responder Chain이라고 하는 것.

  • 만약 끝까지 처리되지 못한다면? 앱이 해당 메세지를 버림!


First Responder


becomeFirstResponder()

  • 이때 맨 처음으로 이벤트들을 받는 리스폰더를 first responder라고 하는데, 우리가 이 first responder을 직접 지정해주기 위해선 자신이 first responder가 될 수 있다고 나타내주어야 함.

  • becomeFirstResponder()
    위 메서드를 사용하면 해당 윈도우에서 객체를 first responder로 만들 것을 요청하며, 객체가 first responder이면 true를, 아니면 false를 리턴하는 형태.

  • but 반드시 호출한다고 first responder가 되는 것은 아님 -> Why? UIKit에게 요청하지만, first responder가 해제가 될 수 없는 상황일 수도 있는 경우엔 불가능!

resignFirstResponder()

  • 그러면 first responder을 포기하기 위한 메서드도 존재하는데, 이 메서드가 바로
    resignFirstResponder()
    해당 객체에게 지금 윈도우의 first responder로서의 상태를 포기하라고 요청하는 메서드.
    이를 사용하면 first responder 상태를 물려주면서 true를 리턴하게 된다.

  • 참고 : UIView는 UIResponder을 상속받는 형태이기 때문에, 우리가 자주 사용하는 UITextField에서 리스폰더 체인 메서드들을 사용할 수 있는 것!

0개의 댓글