참조

1️⃣ UIButton이란?

UIButton 클래스는 사용자의 인터랙션에 반응하여 커스텀 코드를 실행시키는 컨트롤 요소이다.

@MainActor class UIButtion : UIControl

2️⃣ 버튼 사용법

1️⃣ 버튼 생성 3단계

  1. 버튼을 생성하고 버튼의 유형을 설정한다.
  2. 컨텐츠에 맞는 사이즈로 타이틀 또는 이미지를 설정한다.
  3. 버튼을 하나 이상의 액션 메서드와 연결한다.

2️⃣ 사용자 인터랙션에 반응하기

사용자가 버튼을 터치하면 버튼에 연결된 액션 메서드가 호출되어 원하는 작업이 실행됨.

3️⃣ 버튼과 메서드 연결하는 방법

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

4️⃣ 버튼과 연결되는 메서드 형식

버튼을 탭 했을 때 필요한 정보에 따라 아래 세가지 중 한가지 선택하여 사용

@IBAction func doSomething()
@IBAction func doSomething(sender: UIButton)
@IBAction func doSomething(sender: UIButton, forEvent event: UIEvent)

3️⃣ 버튼 모양 구성하기

1️⃣ 버튼의 상태

  • 크게 다섯가지로 표현 가능하다.
    • default, highlighted, focused, selected, disabled
    • 버튼 상태 조합 가능 ex) [default + highlighted] 등
  • 버튼 생성 시 기본 상태 값은 default
  • 사용자가 버튼과 인터랙션하면 상태 값이 변화됨.
  • 프로그래밍 방식 혹은 인터페이스 빌더를 이용해 버튼의 각 상태에 대한 속성을 별도로 지정 가능
    • 별도로 속성을 지정하지 않으면 UIButton 클래스에서 제공하는 기본 동작 사용
    • ex) disabled 버튼은 일반적으로 흐리게 표시되며 사용자가 탭해도 hilighted 되지 않음.

4️⃣ 버튼의 주요 프로퍼티

버튼의 프로퍼티 값을 설정하는 방식에는 코드를 이용하는 방법과 스토리보드의 인스펙터를 이용하는 방법이 있다.

  • enum UIButtonType: 버튼의 유형
    • 버튼의 유형에 따라 버튼의 기본적인 외형과 동작이 달라짐.
    • 처음 버튼을 생성할 때 init(type:) 메서드를 이용하거나, 인터페이스 빌더의 “Attribute Inspecter”에서 버튼 유형을 지정할 수 있음.
    • 한번 생성된 버튼의 유형은 이후 변경 불가능
    • 가장 많이 사용하는 유형은 CustomSystem 이지만 필요에 따라 다른 유형(Detail Disclosure, Info Light, Info Dark, Add Content) 사용 가능
  • var titleLabel: UILabel? : 버튼 타이틀 레이블
  • var imageView: UIImageView? : 버튼의 이미지뷰
  • var tintColor: UIColor! : 버튼 타이틀과 이미지의 틴트 컬러

5️⃣ 버튼의 주요 메서드

// 특정 상태의 버튼 문자열 설정
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)