[iOS 4주차] addTarget(_:action:for:)와 addAction(_:)

황석범·2024년 11월 21일
0

내일배움캠프_iOS_5기

목록 보기
28/76

addTarget(_:action:for:)

  • 사용 대상: 주로 UIKit의 UIControl 객체(UIButton, UISwitch, UITextField 등)에 사용됩니다.
  • 사용법: 특정 이벤트(TouchUpInside, ValueChanged 등)에 대한 동작을 설정합니다.

구문

control.addTarget(target, action: #selector(methodName), for: .event)

매개변수

  • target: 이벤트가 발생했을 때 호출될 메서드가 있는 객체
  • action: 호출할 메서드(Selector)
  • for: 이벤트 종류(UIControl.Event)

ex)

let button = UIButton(type: .system)
button.setTitle("Press Me", for: .normal)
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)

@objc func buttonTapped() {
    print("Button was tapped!")
}

장점

  • 더 구체적인 이벤트(touchDown, valueChanged 등)을 처리할 수 있음
  • UIKit의 다양한 UIControl 이벤트와 호환

addAction(_:)

  • 사용 대상: SwiftUI와 UIKit의 UIbutton, UIBarButtonItem, 또는 UIMenu 등의 일부 객체에서 사용 가능합니다.
  • 사용법: 클로저 기반으로 동작을 연결합니다(Swift 5.3이상)

구문

control.addAction(UIAction(handler: { action in
    // Handle the action
}), for: .event)

매개변수

  • handler: 클로저를 사용하여 동작 정의

ex)

let button = UIButton(type: .system)
button.setTitle("Press Me", for: .normal)
button.addAction(UIAction(handler: { _ in
    print("Button was tapped!")
}), for: .touchUpInside)

장점

  • 클로저 기반이므로 더 간결하고, 해당 동작이 @objc 메서드일 필요 없음
  • 메서드 분리 없이 코드의 가독성을 유지


UIAction

  • iOS 14 이상에서 사용할 수 있는 새로운 API로, 이벤트 처리와 관련된 동작을 클로저로 정의할 수 있게 해줍니다. 이전의 @objc 메서드 기반 처리 방식인 addTarget(_:action:for:)에 비해 코드가 더 간결하고, 가독성이 좋아졌습니다.

UIAction 개요

  • UIAction은 사용자 인터페이스에서 발생하는 이벤트(버튼 탭, 메뉴 선택 등)에 대한 클로저로 정의할 수 있는 클래스입니다.

UIAction의 주요 속성

  • title: 액션의 제목
  • image: 액션과 연관된 아이콘 이미지
  • handler: 이벤트가 발생했을 때 실행될 클로저
  • identifier: 액션을 고유하게 식별하기 위한 값
  • discoverabilityTitle: 보조 설명 텍스트(VoiceOver 등에서 유용)

UIAciton 생성

구문

let action = UIAction(title: "Title", image: UIImage(named: "icon"), identifier: nil, handler: { _ in
    // Action to perform
})

ex)

let button = UIButton(type: .system)
button.setTitle("Tap Me", for: .normal)

// UIAction 추가
button.addAction(UIAction(handler: { _ in
    print("Button was tapped!")
}), for: .touchUpInside)

UIAction의 장점

  1. 클로저 기반: @objc 메서드 없이 동작 정의 가능
  2. 간결한 코드: 액션과 이벤트 처리가 한곳에 작성되어 관리가 쉬움
  3. 다양한 UI 요소에서 사용 가능: UIButton, UIBarButtonItem, UIMenu 등
  4. 유연성: 메뉴와 같은 복합 인터페이스에도 적용 가능
  • iOS 14 이상을 타겟으로 하는 프로젝트라면 UIAction을 사용하는 것이 권장됩니다.
  • 기존 방식(addTarget)은 여전히 유효하므로, 하위 호환성을 고려할 경우 적절히 혼용할 수 있습니다.
profile
iOS 공부중...

0개의 댓글

관련 채용 정보