출처 : Apple developer (아카이브)
부스트코스 강의 1
부스트코스 강의 2
이벤트 발생 시 다른 객체에게 메시지를 보내는 데 필요한 정보를 객체에 보관하는 디자인 패턴
Action
특정 이벤트가 발생했을 때 호출할 메서드
Target
액션이 호출될 객체
이때 원하는 객체를 Target으로 지정하면 액션을 실행할 객체를 상황에 따라서 선택할 수 있다.
IBAction
은 인터페이스 빌더가 메서드를 인지하도록 해줌
// 프로그래밍 방식
@objc func doSomething(_ sender: Any) {
}
// 인터페이스 빌더
@IBAction func doSomething(_ sender: Any) {
}
swift 언어로 작성한 코드에서는 Objective-C 코드와 호환하기 위해서 @objc라고 표시
컨트롤 이벤트와 액션과의 관계
UIKit에는 UIControl
을 상속받은 다양한 컨트롤 클래스 존재 (ex : UIButton, UISwitch, UIStepper)
컨트롤 객체에 발생한 다양한 이벤트 종류를 특정 액션 메서드에 연결할 수 있다.
즉, 컨트롤 객체에서 특정 이벤트가 발생
하면, 미리 지정해 둔 타겟의 액션을 호출
하게 된다.
컨트롤 이벤트의 종류
컨트롤 이벤트는 UIControlEvents
라는 타입으로 정의.
🔽 컨트롤 객체에 발생할 수 있는 이벤트의 종류
touchDown
: 컨트롤을 터치했을 때 발생하는 이벤트touchDownRepeat
: 컨트롤을 연속 터치 할 때 발생하는 이벤트touchDragInside
: 컨트롤 범위 내에서 터치한 영역을 드래그 할 때 발생하는 이벤트touchDragOutside
: 터치 영역이 컨트롤의 바깥쪽에서 드래그 할 때 발생하는 이벤트touchDragEnter
: 터치 영역이 컨트롤의 일정 영역 바깥쪽으로 나갔다가 다시 들어왔을 때 발생하는 이벤트touchDragExit
: 터치 영역이 컨트롤의 일정 영역 바깥쪽으로 나갔을 때 발생하는 이벤트touchUpInside
: 컨트롤 영역 안쪽에서 터치 후 뗐을때 발생하는 이벤트touchUpOutside
: 컨트롤 영역 안쪽에서 터치 후 컨트롤 밖에서 뗐을때 이벤트touchCancel
: 터치를 취소하는 이벤트 (touchUp 이벤트가 발생되지 않음)valueChanged
: 터치를 드래그 및 다른 방법으로 조작하여 값이 변경되었을때 발생하는 이벤트primaryActionTriggered
: 버튼이 눌릴때 발생하는 이벤트 (iOS보다는 tvOS에서 사용)editingDidBegin
: UITextField
에서 편집이 시작될 때 호출되는 이벤트editingChanged
: UITextField
에서 값이 바뀔 때마다 호출되는 이벤트editingDidEnd
: UITextField
에서 외부객체와의 상호작용으로 인해 편집이 종료되었을 때 발생하는 이벤트editingDidEndOnExit
: UITextField
의 편집상태에서 키보드의 return
키를 터치했을 때 발생하는 이벤트allTouchEvents
: 모든 터치 이벤트allEditingEvents
: UITextField
에서 편집작업의 이벤트applicationReserved
: 각각의 애플리케이션에서 프로그래머가 임의로 지정할 수 있는 이벤트 값의 범위systemReserved
: 프레임워크 내에서 사용하는 예약된 이벤트 값의 범위allEvents
: 시스템 이벤트를 포함한 모든 이벤트UI Button
UIButton 클래스는 사용자의 상호 작용에 반응하여 사전에 지정된 코드를 실행하는 컨트롤 요소
addTarget(_:action:for:)
메서드 사용@IBAction
: 인터페이스 빌더에서 연결버튼을 탭 했을 때 필요한 정보에 따라 선택
1. func doSomething()
2. func doSomething(sender: UIButton)
3. func doSomething(sender: UIButton, forEvent event: UIEvent)
조합된 상태일 수도 있음
프로그래밍 방식 혹은 인터페이스 빌더를 이용해 버튼의 각 상태에 대한 속성을 별도로 지정
1. default : 기본 상태 값
2. highlighted : 터치 후 강조됨
3. focused : 포커스 된 상태
4. selected : 선택된 상태
5. disabled : 비활성화된 상태 (이벤트 동작X)
// 특정 상태의 버튼의 문자열 설정
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)