Target-Action

Martin Kim·2021년 10월 7일
0

디자인패턴

목록 보기
2/6
post-thumbnail

Target-Action

  • 어떤 객체에서 이벤트가 들어왔을 때 누가(target) 어떤 동작(action)을 수행할 지 등록해두어 사용하는 디자인 패턴
  • 이벤트 리스닝 같은 느낌?으로 이해했다.

왜 Target-Action 인가?

  • 직접 타겟이 될 객체에 액션이 되는 메서드를 호출하면 되는데 왜 이런 디자인을 사용하는가??
  • 같은 메서드가 여러 클래스에 지정되어 있는 경우가 있는데 이를 구별하기 위해서이다. 원하는 인스턴스에 있는 객체를 타겟으로 지정하면 해당 인스턴스의 액션을 실행할 객체를 선택할 수 있기 때문이다.

Action Method

  • 액션 메서드는 2가지 방식으로 작성된다.
// 프로그래밍 방식
@objc func doSomething(_ sender: Any) {

}
// 인터페이스 빌더 방식
@IBAction func doSomething(_ sender: Any) { 

}
  1. @objc
    • 아직 애플의 프레임워크는 Objective-C 스타일의 언어가 많아서 스위프트 언어로 작성한 코드에서 Objective-C의 코드를 호환시키려면 @objc라고 명시해주어야 한다. 이건 스위프트4이전에는 자동으로 만들어 주었으나 4부터는 명시해주어야 한다고 한다!
    • 왜냐하면 Target-Action 패턴이 Objective-C의 message 기반의 dispatch를 사용하기 때문이다.
  2. @IBAction
    • 인터페이스 빌더로 해당 메서드를 직접 스토리보드로 해당 UI요소와 연결하여 액션을 지정할때 사용한다.
    • @objc의 기능에 더불어 인터페이스 빌더에 해당 함수를 노출시키는 기능까지 포함한다.

컨트롤 이벤트

컨트롤 이벤트는 UIControlEvents라는 열거형 타입으로 정의되어 있다. 이 이벤트를 감지해서 target-action을 지정할 수 있다.

  • touchDown
    컨트롤을 터치했을 때 발생하는 이벤트

  • touchDownRepeat
    컨트롤을 연속 터치 할 때 발생하는 이벤트

  • touchDragInside
    컨트롤 범위 내에서 터치한 영역을 드래그 할 때 발생하는 이벤트

  • touchDragOutside
    터치 영역이 컨트롤의 바깥쪽에서 드래그 할 때 발생하는 이벤트

  • touchDragEnter
    터치 영역이 컨트롤의 일정 영역 바깥쪽으로 나갔다가 다시 들어왔을 때 발생하는 이벤트

  • touchDragExit
    터치 영역이 컨트롤의 일정 영역 바깥쪽으로 나갔을 때 발생하는 이벤트

  • touchUpInside
    컨트롤 영역 안쪽에서 터치 후 뗐을때 발생하는 이벤트

  • touchUpOutside
    컨트롤 영역 안쪽에서 터치 후 컨트롤 밖에서 뗐을때 이벤트

  • touchCancel
    터치를 취소하는 이벤트 (touchUp 이벤트가 발생되지 않음)

  • valueChanged
    터치를 드래그 및 다른 방법으로 조작하여 값이 변경되었을때 발생하는 이벤트

  • primaryActionTriggered
    버튼이 눌릴때 발생하는 이벤트 (iOS보다는 tvOS에서 사용)

  • editingDidBegin
    UITextField에서 편집이 시작될 때 호출되는 이벤트

  • editingChanged
    UITextField에서 값이 바뀔 때마다 호출되는 이벤트

  • editingDidEnd
    UITextField에서 외부객체와의 상호작용으로 인해 편집이 종료되었을 때 발생하는 이벤트

  • editingDidEndOnExit
    UITextField의 편집상태에서 키보드의 return 키를 터치했을 때 발생하는 이벤트

  • allTouchEvents
    모든 터치 이벤트

  • allEditingEvents
    UITextField에서 편집작업의 이벤트

  • applicationReserved
    각각의 애플리케이션에서 프로그래머가 임의로 지정할 수 있는 이벤트 값의 범위

  • systemReserved
    프레임워크 내에서 사용하는 예약된 이벤트 값의 범위

  • allEvents
    시스템 이벤트를 포함한 모든 이벤트

이미지 출처: 네이버 부스트코스 iOS 앱 프로그래밍

profile
학생입니다

0개의 댓글