본문 바로가기

Codes Travel/iOS Boost Course #2019

Target-Action 디자인 패턴

 

안녕하세요 :)

iOS 개발자 리치(rich_iosdev)입니다.


공유해드릴 내용은 Target-Action 입니다.

Target-Action 디지안 패턴에서는..

이벤트가 발생하면 그 이벤트를 받은 객체가 다른 객체에게 메세지를 전달할 때 필요한 정보를 포함합니다.

타겟 (Target)은 호출될 객체를 뜻합니다.
액션 (Action)은 특정 이벤트가 발생했을 때 호출할 메서드를 의미합니다.

사실 Target-Action 디자인 패턴은 코드로 직접 구현해보고 이해하는 것이 더 쉬운 것 같습니다. 아래 샘플코드를 통해서 자세히 설명드리도록 하겠습니다.

 

샘플 코드

import UIKit

class ViewController: UIViewController {

    let button: UIButton = {
        let button = UIButton()
        button.setTitle("버튼", for: .normal)
        button.setTitleColor(.black, for: .normal)
        return button
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        
        view.addSubview(button)
        
        button.translatesAutoresizingMaskIntoConstraints = false
        button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        
    }
    
    @objc func buttonAction(_ button: UIButton) {
        print("버튼이 눌렸습니다...!!!")
    }
}

 

1. 먼저 일반적인 ViewController의 View 위에 UIButton 타입의 프로퍼티를 만들어줍니다.

(화면에 보여주는 부분에 대한 설명은 생략하겠습니다: Autolayout)

 

2. 해당 버튼 프로퍼티에 addTarget 을 통해서 Target과 Action을 정해줍니다.

여기서 Target은 호출되는 객체인 ViewController (self)를 의미하며, Action은 호출되는 메서드를 의미합니다

 

3. 마지막 하단에 있는 @objc func buttonAction 은 이벤트가 발생했을 때 호출되는 메서드입니다.

@objc는 Swift에서 Objective-C 유형의 메서드를 사용하는 경우 명시적으로 표시해줘야합니다.

 

addTarget (for: ) 부분에는 UIControlEvent의 종류를 선택해서 입력해줘야합니다. 종류는 굉장이 다양하고 위 샘플코드에서 사용된 종류는 touchUpInside입니다. touchUpInside 는 컨트롤 영역 안쪽에서 터치 후 뗐을때 발생하는 이벤트입니다.

 

내용 중에 잘못된 부분이 있다면 댓글을 달아주세요

확인해서 수정하도록 하겠습니다!

 

끝까지 읽어주셔서 정말 감사합니다

 

References

 

[부스트코스] iOS 프로그래밍

Target-Action 디자인 패턴이란?

https://www.edwith.org/boostcourse-ios/lecture/16854/

'Codes Travel > iOS Boost Course #2019' 카테고리의 다른 글

UITableView ( 테이블 뷰 )?  (0) 2019.07.31
Gesture Recognizer란?  (0) 2019.07.24
Singleton (싱글턴) 이란?  (0) 2019.07.24
Delegation?  (0) 2019.07.23
UIViewController 뷰의 상태변화 감지 메서드  (0) 2019.07.23