본문 바로가기

iOS

[iOS] UIResponder

UIResponder

본 문서에는 애플 개발자 홈페이지의 UIResponder 공식 문서를 번역한 내용을 작성한다.

 

UIResponder란?


image

UIResponder 클래스는 이벤트에 대한 응답 등과 같은 처리를 위한 추상 인터페이스를 의미한다.

class UIResponder: NSObject

UIResponder 클래스는 NSObject 클래스를 상속한다.

 

Overview


Responder 객체는 UIResponse의 인스턴스이며 UIKit app의 이벤트 핸들링의 백본(Backbone)을 구성한다.

많은 핵심 객체들 (ex: UIApplication 객체, UIViewController 객체 ...etc)는 모두 Responder다.

이벤트가 발생하면 UIKit은 이를 처리하기 위해 Responder 에게 이를 전달한다.

여기서 말하는 이벤트란 사용자의 화면 터치, 모션 기능, 원격 제어 등 모든것을 포함한다.

특정 이벤트를 핸들링 하기 위해서 responder는 해당 메소드를 override 해야한다.

간단한 예시를 살펴보자.

예를 들어 터치 이벤트를 핸들링 하기 위해서는 responder는 해당 메소드인 touchesBegan(_:with:), touchesMoved(_:with:), touchesEnded(_:with:), touchesCancelled(_:with:) 과 같은 메소드를 구현해야한다.

터치 이벤트의 경우에는 UIKit에서 제공하는 이벤트 정보를 활용하여 해당 터치 이벤트의 변경 사항을 추적하고 앱의 인터페이스를 이벤트에 따라서 적절히 처리해야 한다.

UIKit Responder는 또한 처리되지 않은 이벤트들을 앱의 다른 부분으로 전달하는 역할도 한다.

만일 특정 responder가 이벤트를 핸들링 하지 않을 경우, 해당 이벤트를 Responder Chaining을 통해 다음 이벤트로 전달한다.

UIKit은 사전 정의된 규칙에 따라 이벤트를 수신 할 다음 객체를 결정하는 Responder Chaining을 동적으로 관리한다.

예를 들어, viewsuperview로 이벤트를 전달하고, rootview는 해당 뷰 컨트롤러로 이벤트를 전달한다.

 

Topics


Responder Chain

var next: UIResponder?
// Responder Chaining을 이용해 다음 Responder를 전달한다.

var isFirstResponder: Bool
// 현재 객체가 FirstResponder 가 맞는지에 대한 불린 값을 반환한다.

var canBecomeFirstResponder: Bool
// 현재 객체가 FirstrResponder 가 될 수 있는지에 대한 여부를 불린 값으로 반환한다.

func becomeFirstResponder() -> Bool
// UIKit에게 현재 객체가 Window에서 FirstResponder가 될 수 있도록 요청한다.

var canResignFirstResponder: Bool
// 리시버가 FirstResponder 상태를 포기할지를 나타내는 불린 값을 반환한다.

func resignFirstResponder() -> Bool
// 현재 객체가 Window에서 FirstResponder를 포기할지 요청되었음을 알린다.

위 메서드들이 Responder의 체인을 관리해주는 메서드들이다.

Responding to Events

func touchesBegan(Set<UITouch>, with: UIEvent?)
// 뷰 또는 윈도우에서 터치가 발생했음을 responder에게 알린다.

func touchesEnded(Set<UITouch>, with: UIEvent?)
// 뷰 또는 윈도우에서 손가락이 떨어졌을때 이를 responder에게 알린다.

func motionBegan(UIEvent.EventSubtype, with: UIEvent?)
// 모션이 발생했음을 receiver에게 알린다.

func motionEnded(UIEvent.EventSubtype, with: UIEvent?)
// 모션이 끝났음을 receiver에게 알린다.

Type Properties


class let keyboardDidHideNotification: NSNotification.Name
// 키보드가 dismiss 된 직후 게시한다.

class let keyboardDidShowNotification: NSNotification.Name
// 키보드가 present 된 직후 게시한다.

class let keyboardWillHideNotification: NSNotification.Name
// 키보드가 dismiss 되기 이전에 게시한다.

class let keyboardWillShowNotification: NSNotification.Name
// 키보드가 present 되기 이전에 게시한다.

Reference

'iOS' 카테고리의 다른 글

[iOS] How to use Firebase Auth in iOS  (0) 2020.06.02
[iOS] Unit Test  (0) 2020.05.29
[iOS] NavigationController RootView 변경  (0) 2020.05.26
[iOS] Completion Handler  (0) 2020.05.25
[iOS] Firebase  (0) 2020.05.24