관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] UIButton 액션 핸들러 selector없이 간결하게 표현하기 (#selector, #addAction) 본문

iOS 응용 (swift)

[iOS - swift] UIButton 액션 핸들러 selector없이 간결하게 표현하기 (#selector, #addAction)

jake-kim 2023. 10. 6. 01:28

기존의 UIButton 액션 핸들러

  • addTarget 메소드의 #selector 부분에 @objc로 정의한 메소드 이름을 넘기는 방식
button.addTarget(self, action: #selector(handleTap), for: .touchUpInside)

@objc
private func handleTap() {
    print("tap button!")
}

addAction 방식의 액션 핸들러

  • iOS 14+ 부터 addAction 메소드가 UIControl 확장으로 정의
open class UIControl : UIView {
    /// Adds the UIAction to a given event. UIActions are uniqued based on their identifier, and subsequent actions with the same identifier replace previously added actions. You may add multiple UIActions for corresponding controlEvents, and you may add the same action to multiple controlEvents.
    @available(iOS 14.0, *)
    open func addAction(_ action: UIAction, for controlEvents: UIControl.Event)
}
  • 이 메소드를 사용하면 @objc 메소드 필요없이 addAction 클로저에 UIAction 인스턴스를 넣어서 구현이 가능
button.addAction(
    UIAction { _ in
        print("tap button!")
    },
    for: .touchUpInside
)
  • 이 메소드를 사용하면 별도로 @objc 메소드를 정의할 필요도 없고, 후행 클로저 형태로 액션 핸들러를 정의하므로, 버튼을 정의하는 곳에서 쉽게 버튼 동작 파악도 가능하게 구현이 가능

* 전체 코드: https://github.com/JK0369/ExButtonAction

* 참고

https://www.swiftwithvincent.com/newsletter

Comments