[Swift] (1) : Target-Action, Button

krystal·2022년 11월 6일
0

Swift 기초

목록 보기
8/11
post-thumbnail

출처 : Apple developer (아카이브)
부스트코스 강의 1
부스트코스 강의 2

Target-Action 이란?

이벤트 발생 시 다른 객체에게 메시지를 보내는 데 필요한 정보를 객체에 보관하는 디자인 패턴

Action 특정 이벤트가 발생했을 때 호출할 메서드
Target 액션이 호출될 객체

사용하게 되는 이유

1. 동일한 메서드가 여러 클래스에 정의되어 있는 경우
2. 클래스의 인스턴스가 여러개인 경우

이때 원하는 객체를 Target으로 지정하면 액션을 실행할 객체를 상황에 따라서 선택할 수 있다.

Action 메서드 : 특별한 형식이 필요하다

IBAction은 인터페이스 빌더가 메서드를 인지하도록 해줌

// 프로그래밍 방식
@objc func doSomething(_ sender: Any) {

}

// 인터페이스 빌더
@IBAction func doSomething(_ sender: Any) { 

}
swift 언어로 작성한 코드에서는 Objective-C 코드와 호환하기 위해서 @objc라고 표시

컨트롤 이벤트

컨트롤 이벤트와 액션과의 관계

UIKit에는 UIControl을 상속받은 다양한 컨트롤 클래스 존재 (ex : UIButton, UISwitch, UIStepper)
컨트롤 객체에 발생한 다양한 이벤트 종류를 특정 액션 메서드에 연결할 수 있다.
즉, 컨트롤 객체에서 특정 이벤트가 발생하면, 미리 지정해 둔 타겟의 액션을 호출하게 된다.

컨트롤 이벤트의 종류
컨트롤 이벤트는 UIControlEvents라는 타입으로 정의.

🔽 컨트롤 객체에 발생할 수 있는 이벤트의 종류

  1. touchDown : 컨트롤을 터치했을 때 발생하는 이벤트
    • UIControlEvents.touchDown

  2. touchDownRepeat : 컨트롤을 연속 터치 할 때 발생하는 이벤트
    • UIControlEvents.touchDownRepeat

  3. touchDragInside : 컨트롤 범위 내에서 터치한 영역을 드래그 할 때 발생하는 이벤트
    • UIControlEvents.touchDragInside

  4. touchDragOutside : 터치 영역이 컨트롤의 바깥쪽에서 드래그 할 때 발생하는 이벤트
    • UIControlEvents.touchDragOutside

  5. touchDragEnter : 터치 영역이 컨트롤의 일정 영역 바깥쪽으로 나갔다가 다시 들어왔을 때 발생하는 이벤트
    • UIControlEvents.touchDragEnter

  6. touchDragExit : 터치 영역이 컨트롤의 일정 영역 바깥쪽으로 나갔을 때 발생하는 이벤트
    • UIControlEvents.touchDragExit

  7. touchUpInside : 컨트롤 영역 안쪽에서 터치 후 뗐을때 발생하는 이벤트
    • UIControlEvents.touchUpInside

  8. touchUpOutside : 컨트롤 영역 안쪽에서 터치 후 컨트롤 밖에서 뗐을때 이벤트
    • UIControlEvents.touchUpOutside

  9. touchCancel : 터치를 취소하는 이벤트 (touchUp 이벤트가 발생되지 않음)
    • UIControlEvents.touchCancel

  10. valueChanged : 터치를 드래그 및 다른 방법으로 조작하여 값이 변경되었을때 발생하는 이벤트
    • UIControlEvents.valueChanged

  11. primaryActionTriggered : 버튼이 눌릴때 발생하는 이벤트 (iOS보다는 tvOS에서 사용)
    • UIControlEvents.primaryActionTriggered

  12. editingDidBegin : UITextField에서 편집이 시작될 때 호출되는 이벤트
    • UIControlEvents.editingDidBegin

  13. editingChanged : UITextField에서 값이 바뀔 때마다 호출되는 이벤트
    • UIControlEvents.editingChanged

  14. editingDidEnd : UITextField에서 외부객체와의 상호작용으로 인해 편집이 종료되었을 때 발생하는 이벤트
    • UIControlEvents.editingDidEnd

  15. editingDidEndOnExit : UITextField의 편집상태에서 키보드의 return 키를 터치했을 때 발생하는 이벤트
    • UIControlEvents.editingDidEndOnExit

  16. allTouchEvents : 모든 터치 이벤트
    • UIControlEvents.allTouchEvents

  17. allEditingEvents : UITextField에서 편집작업의 이벤트
    • UIControlEvents.allEditingEvents

  18. applicationReserved : 각각의 애플리케이션에서 프로그래머가 임의로 지정할 수 있는 이벤트 값의 범위
    • UIControlEvents.applicationReserved

  19. systemReserved : 프레임워크 내에서 사용하는 예약된 이벤트 값의 범위
    • UIControlEvents.systemReserved

  20. allEvents : 시스템 이벤트를 포함한 모든 이벤트
    • UIControlEvents.allEvents



Button

UI Button
UIButton 클래스는 사용자의 상호 작용에 반응하여 사전에 지정된 코드를 실행하는 컨트롤 요소

Button : 생성 단계

  1. 버튼을 생성 후 버튼의 유형을 선택
  2. 버튼을 나타내기 위한 문자를 입력 or 이미지를 설정한 뒤 크기 조정
  3. 버튼에 특정 이벤트가 발생할 때 작동할 하나 이상의 메서드를 연결

Button : Button과 메서드 연결하는 방법

  1. addTarget(_:action:for:) 메서드 사용
  2. @IBAction : 인터페이스 빌더에서 연결

Button : Button과 연결되는 메서드 형식

버튼을 탭 했을 때 필요한 정보에 따라 선택

1. func doSomething()
2. func doSomething(sender: UIButton)
3. func doSomething(sender: UIButton, forEvent event: UIEvent)

Button : 상태

조합된 상태일 수도 있음
프로그래밍 방식 혹은 인터페이스 빌더를 이용해 버튼의 각 상태에 대한 속성을 별도로 지정

1. default : 기본 상태 값
2. highlighted : 터치 후 강조됨
3. focused : 포커스 된 상태
4. selected : 선택된 상태
5. disabled : 비활성화된 상태 (이벤트 동작X)

Button : 주요 메서드

// 특정 상태의 버튼의 문자열 설정
func setTitle(String?, for: UIControlState)

// 특정 상태의 버튼의 문자열 반환
func title(for: UIControlState) -> String?

// 특정 상태의 버튼 이미지 설정
func setImage(UIImage?, for: UIControlState)

// 특정 상태의 버튼 이미지 반환
func image(for: UIControlState) -> UIImage?

// 특정 상태의 백그라운드 이미지 설정
func setBackgroundImage(UIImage?, for: UIControlState)

// 특정 상태의 백그라운드 이미지 반환
func backgroundImage(for: UIControlState) -> UIImage?

// 특정 상태의 문자열 색상 설정
func setTitleColor(UIColor?, for: UIControlState)

// 특정 상태의 attributed 문자열 설정
func setAttributedTitle(NSAttributedString?, for: UIControlState)
profile
https://source-coding.tistory.com/

0개의 댓글