Post

UIKit - 버튼 이벤트 핸들러 설정 방법

UIKit - 버튼 이벤트 핸들러 설정 방법

버튼 이벤트 핸들러 설정 방법

UIButton에 내장되어 있는 addTarget 메서드를 통해 처리 가능함.

addTarget 메서드 Document

image

메서드 매개 변수

  • 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.