개요
모바일 개발을 하다보면 버튼이 들어가는 뷰 작업을 굉장히 많이 하게 됩니다.
버튼을 눌렀을 때의 event 처리도 당연히 이어지는 작업 입니다.
버튼에 대한 event 처리는 크게
1. RxSwift의 subscribe 사용
2.@objc function 생성 후 addTarget으로 연결
이 두 가지 방법을 많이 사용하는데요.
RxSwift에 대한 내용은 추후에 하나하나 다뤄보는것으로 하고,
오늘은 주로 간단한 event 처리에 주로 사용하는 (사실 읽기 더 편해서...) 2번 방법에서 사용하는 개념들에 대해 알아보겠습니다.
let btnConfirm = UIButton()
self.addSubview(btnConfirm)
btnConfirm.then {
$0.addTarget(self, action: #selector(btnConfirmPressed(_:)), for: .touchUpInside)
}
@objc func btnConfirmPressed(_ button: UIButton) {
// 버튼을 눌렀을 때 처리
}
2번 방법, 즉 함수를 이용한 button event 처리는 위 내용이 전부 입니다.
참 쉽죠?
쉬운 방법인데.. @objc, addTarget, #selector 의 정의을 옛날에 슥 보고 지나쳤던 것 같아서 이 글에서 정리하겠습니다.
@objc
Swift를 사용한 코드를 Objective-C 코드와 상호작용 시키기 위해 쓰는 키워드 입니다.
Swift를 사용한 코드에서 class나 method에 이 키워드를 붙이면 Objective-C와 Swift 코드에서 사용할 수 있게 됩니다.
Objective-C를 사용하는 곳에서 @objc를 붙이지 않은 function을 호출하면 오류가 발생하게 됩니다.
#selector
함수를 직접 지정해서 실행할 때 사용되는 함수 선택 지정자(?) 입니다.
본래 Objective-C에서 @selector(methodName)라는 형식으로 사용 되었는데, 런타임에서 선택한 함수가 실행되는 동적 바인딩의 형태 입니다.
이게 Swift로 넘어오면서 #selector() 키워드로 바뀌며 안에 함수를 지정하는 형태가 되었습니다.
#selector() 에 전달할 메소드를 작성할 때는 Objective-C와의 호환성을 위해 반드시 함수에 @objc 키워드를 붙여줘야 합니다.
addTarget(_:action:for:)
developer.apple.com/documentation/uikit/uicontrol/1618259-addtarget
func addTarget(_ target: Any?, action: Selector, for controlEvents: UIControl.Event)
control로 발생하는 이벤트로 target 오브젝트와 action 메서드를 이어주는 함수 입니다.
'iOS > 개념' 카테고리의 다른 글
[iOS] UIScrollView 내부에 statusBar 높이만큼 inset이 들어가는 문제 - contentInsetAdjustmentBehavior (2) | 2021.11.08 |
---|---|
[Swift] UITouch vs UIGestureRecognizer (0) | 2021.03.07 |
[iOS] App States (0) | 2021.01.24 |
[iOS][업뎃중] iOS 주요 개념 정리 (0) | 2021.01.24 |
[iOS] Frame 과 Bounds의 차이 (0) | 2021.01.04 |