객체는 이벤트가 발생할 때 다른 객체에 메시지를 보내는데 필요한 정보를 포함합니다. 액션은 특정 이벤트가 발생했을 때 호출할 메서드를 의미합니다. 그리고 타겟은 액션이 호출될 객체를 의미합니다. 이벤트 발생 시 전송된 메시지를 액션 메시지라고 하고, 타겟은 프레임워크 객체를 포함한 모든 객체가 될 수 있으나, 보통 컨트롤러가 되는 경우가 일반적입니다.
만약 특정 이벤트가 발생했을 때 abc라는 이름의 메서드를 호출해야하는 상황이라면 이 abc라는 (액션)메서드는 A라는 클래스에도 정의되어 있고, B라는 클래스에도 정의되어 있는 경우가 있습니다. 이렇게 같은 메서드가 여러 클래스에 정의되어 있는경우도 있고, 그런 클래스의 인스턴스가 여러개인 상황도 있습니다. 이런 여러가지 상황에서 우리가 원하는 객체를 Target으로 지정하면 abc라는 액션을 실행할 객체를 상황에 따라 선택할 수 있습니다.
컨트롤 이벤트
컨트롤 이벤트와 액션과의 관계
UIKit에는 UIButton
, UISwitch
, UIStepper
등 UIControl
을 상속받은 다양한 컨트롤 클래스가 있습니다. 그런 컨트롤 객체에 발생한 다양한 이벤트 종류를 특정 액션 메서드에 연결할 수 있습니다. 즉, 컨트롤 객체에서 특정 이벤트가 발생하면, 미리 지정해 둔 타겟의 액션을 호출하게 됩니다.
컨트롤 이벤트의 종류
컨트롤 이벤트는 UIControlEvents
라는 타입으로 정의되어 있습니다. 아래는 컨트롤 객체에 발생할 수 있는 이벤트의 종류입니다.
- touchDown
- 컨트롤을 터치했을 때 발생하는 이벤트
- UIControlEvents.touchDown
- touchDownRepeat
- 컨트롤을 연속 터치 할 때 발생하는 이벤트
- UIControlEvents.touchDownRepeat
- touchDragInside
- 컨트롤 범위 내에서 터치한 영역을 드래그 할 때 발생하는 이벤트
- UIControlEvents.touchDragInside
- touchDragOutside
- 터치 영역이 컨트롤의 바깥쪽에서 드래그 할 때 발생하는 이벤트
- UIControlEvents.touchDragOutside
- touchDragEnter
- 터치 영역이 컨트롤의 일정 영역 바깥쪽으로 나갔다가 다시 들어왔을 때 발생하는 이벤트
- UIControlEvents.touchDragEnter
- touchDragExit
- 터치 영역이 컨트롤의 일정 영역 바깥쪽으로 나갔을 때 발생하는 이벤트
- UIControlEvents.touchDragExit
- touchUpInside
- 컨트롤 영역 안쪽에서 터치 후 뗐을때 발생하는 이벤트
- UIControlEvents.touchUpInside
- touchUpOutside
- 컨트롤 영역 안쪽에서 터치 후 컨트롤 밖에서 뗐을때 이벤트
- UIControlEvents.touchUpOutside
- touchCancel
- 터치를 취소하는 이벤트 (touchUp 이벤트가 발생되지 않음)
- UIControlEvents.touchCancel
- valueChanged
- 터치를 드래그 및 다른 방법으로 조작하여 값이 변경되었을때 발생하는 이벤트
- UIControlEvents.valueChanged
- primaryActionTriggered
- 버튼이 눌릴때 발생하는 이벤트 (iOS보다는 tvOS에서 사용)
- UIControlEvents.primaryActionTriggered