728x90
기존의 UIButton Action Handler
private let button: UIButton = {
let button = UIButton()
button.setTitle("버튼", for: .normal)
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
return button
}()
@objc private func buttonTapped() {
print("Button Tapped!")
}
Button의 이벤트 처리를 위해 @objc로 정의한 메소드를 addTarget 메소드를 이용하여 처리하였다.
addAction
iOS 14+ 부터 addAction 메소드를 이용해서 Button의 이벤트를 처리할 수 있게 되었다.
addAction 메소드를 사용하면 기존의 @objc 메소드 없이 addAction 메소드를 이용하여 Button의 이벤트 처리가 가능하다.
private let button: UIButton = {
let button = UIButton()
button.setTitle("버튼", for: .normal)
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(myButton)
let buttonAction = UIAction { [weak self] _ in
print("ButtonTapped")
}
myButton.addAction(buttonAction, for: .touchUpInside)
}
내 생각
기존의 방식(addTarget + @objc)
1. 익숙하다.
2. 간단한 이벤트 처리에 적합하다.
3. 코드가 지저분 해 보일수도 있다. (상대적으로 ?)
새로운 방식(addAction + UIAction)
1. 신선하다.
2. 세밀하게 이벤트를 처리할 수 있다. (.on, .off, .disabled 등 다양한 상태를 가질 수 있다.)
3. 가독성 좋은 코드를 작성할 수 있다. (상대적으로 ?)
iOS 14+ 부터 지원하기 때문에 하위 버전을 타겟으로 하는 앱에서는 사용할 수 없지만, 가독성 좋은 코드를 작성할 수 있다는 점에서 + 점수를 주고 싶다 !
시간 날 때 UIAction의 생성자에 대해 만져봐야겠다. (생성자에 엄청 많은 파라미터를 받아오더라!! 하나하나 뜯어봐야겠다)
'Swift > UIkit' 카테고리의 다른 글
[UIKit] frame과 bounds를 알아보자. (0) | 2024.06.20 |
---|---|
[UIKit] CollectionViewFlowLayout에 대해 알아보자. (0) | 2024.06.19 |
[UIkit] 문제 해결 - contentView ?!!! 💣 (0) | 2023.03.30 |
[UIkit] CollectionView와 tableView를 이용해서 커스텀 레이아웃 만들기 (0) | 2023.03.28 |
[UIkit] 오토 레이아웃 파헤치기 - 4 ⛏️ (0) | 2023.03.24 |