UIKit - 버튼 이벤트 핸들러 설정 방법
UIKit - 버튼 이벤트 핸들러 설정 방법
버튼 이벤트 핸들러 설정 방법
UIButton에 내장되어 있는 addTarget 메서드를 통해 처리 가능함.
addTarget 메서드 Document
메서드 매개 변수
target: 누가 처리할 것인지action: 이벤트가 발생하면 어떤 메서드를 호출할 것인지controlEvents: 어떤 이벤트를 핸들링할 것인지
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import UIKit
class ViewController: UIViewController {
private lazy var exBtn: UIButton = {
let btn = UIButton()
btn.setTitle("이벤트", for: .normal)
btn.backgroundColor = .black
btn.setTitleColor(.white, for: .normal)
// 이벤트 처리 설정
btn.addTarget(self, action: #selector(ViewController.handleEvent), for: .touchUpInside)
return btn
}()
override func viewDidLoad() {
super.viewDidLoad()
// 하위 뷰 추가
self.view.addSubview(exBtn)
// 자동 프레임 조정 해제
exBtn.translatesAutoresizingMaskIntoConstraints = false
// 오토 레이아웃 제약 설정
exBtn.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 30).isActive = true
exBtn.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -30).isActive = true
exBtn.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
}
@objc func handleEvent(){
print("버튼이 눌렸음")
}
}
lazy var를 사용해서 지연 초기화를 해주는 이유는 저장 프로퍼티가self보다 먼저 초기화 되기 떄문임. 실행에는 문제가 없으나 경고창이 뜨는게 불편하다면lazy var를 통해 처리해야함.
위 예시에서 주의깊게 봐야할 부분은 아래 코드임.
1
2
// 이벤트 처리 설정
btn.addTarget(self, action: #selector(ViewController.handleEvent), for: .touchUpInside)
target:self-> 자기 자신(위 코드에선ViewController)이 처리함.action:#selector(ViewController.handleEvent)-> 특정 이벤트가 발생했을 때handleEvent를 호출함for:touchUpInside->touchUpInside이벤트를 핸들링
This post is licensed under CC BY 4.0 by the author.
