UIKit) UIButton

1 minute read

UIButton

버튼은 탭 이벤트를 처리하는 가장 기본적인 컨트롤이다.

탭 이벤트는 touchUpInside 이벤트이고 이전 시간에 공부했던 Target-Action 메커니즘으로 처리한다.

버튼은 미리 정의 된 6가지 타입을 가지고 있다.

하지만 모든 속성을 직접 설정해서 커스텀 타입을 구현 할 수도 있다.

타입에 대해서 알아보자.

  1. System

    라이브러리를 열어서 추가할 때에 기본으로되어 표시되는 타입이다. System 버튼은 타이틀텍스트 타이틀컬러 버튼이미지를 자유롭게 설정 가능하다.

  2. Detail Disclosure

    부가적인 정보를 모달이나 팝오버형태로 표시할때 사용한다. 어떤 위치에서든지 자유롭게 사용가능하지만 보통 tableViewCell내부에서 사용한다.

  3. info 상세정보나 구성을 표시할때 사용한다. infoLight와 infoDark는 눈으로 보이는 차이는 없고 동일하게 표시된다.

  4. Add Contact 주소데이터를 추가할때 사용한다. 이 버튼을 탭하면 주소록에서 특정항목을 선택하거나 새로운 입력화면이 표시될것이라고 예상한다. 반드시 주소록과 관련된 곳에서만 사용하지는 않는다.

  5. Close IOS13에서 새롭게 추가된 버튼이다. 화면을 닫거나 작업을 취소하는 기능을 구현할 때 주로 사용한다.

  6. Custum 이름 그대로 커스텀 타입을 구현할 때 사용한다.

State (상태)

버튼은 네가지 상태를 가지고있다.

  • Default
  • Highlighted
  • Selected
  • Disabled

상태 중의 하나를 선택 할 때마다

스크린샷 2021-01-08 오전 6 13 45

사진속 속성들을 각각 지정할 수가 있다.

터치이벤트가 발생하거나 속성이 바뀔때마다 상태가 바뀌고 여기에 따라 시각적인 상태도 바뀐다.

상태를 바꾼다고 버튼의 상태로 설정되지 않고 바뀐 상태와 연관 된 속성들을 설정할 뿐이다.

실제로 버튼의 상태를 바꾸고 싶다면 컨트롤 속성에 있는 State 옵션을 바꿔야 한다.

스크린샷 2021-01-08 오전 6 16 54

여기!!!! 속성칸에 Control 내부에 있다. 지금 상태는 Default이다.

컨트롤은 두개 이상의 상태를 가질 수 있고, 두개 이상의 옵션을 체크할 수 있다.

버튼의 state속성은 UIControl 클래스로부터 상속한 읽기전용 속성이다.

그래서 현재 상태를 가져올 수 있지만 바꾸는 것은 불가능하다.

#

Text 속성

상태가 네가지이므로 Text의 속성 또한 네가지의 속성을 가진다.

인터페이스 빌더로 설정하는 법은 위에서 알아본 상태변경이랑 같은 내용이므로 코드로 알아보자.

스크린샷 2021-01-08 오전 6 34 50

위 그림의 Default 버튼을 바꿔보려고한다.

스크린샷 2021-01-08 오전 6 35 18

버튼안에 있는 레이블에 접근하고 싶다면 titleLabel 속성으로 접근한다.

스크린샷 2021-01-08 오전 6 37 33

엥?? text랑 textColor은 바뀌지 않았다,,

버튼은 titleLabel에 직접접근해서 text와 textColor를 바꾸는 것을 허용하지 않는다.

text와 textColor를 바꾸고 싶다면 UIButton이 제공하는 메서드를 사용해야한다.

setTitle(_:for:) 이러한 메서드들은 마지막 파라미터로 상태를 받는다.

코드로 속성을 바꿀때에도 상태별로 바꿔줘야 한다.

스크린샷 2021-01-08 오전 6 42 43

스크린샷 2021-01-08 오전 6 44 23

이렇게 코드를 바꾸고나니 이번에는 text와 textColor가 바뀌었다!!


Image Button

버튼은 설정한 이미지를 항상 레이블 앞에 표시한다.

또 이미지를 원하는 위치에 배치하는 기능을 제공하지 않는다.

그래서 다른 위치에 표시하고 싶다면 트랜스폼 속성을 조작해야 한다.

이러한 방법을 해결하기 위해서 스택뷰를 사용할 수 있다.


Tip!!

버튼의 하나의 Event에 여러 개를 추가할 수 있을까?? YES!!!

  • touchUpInside event에 action 메서드 두 개 추가 가능

버튼이 여러 개일 경우 하나의 액션에 추가할 수 있을까?? YES!!!

  • 서로 다른 버튼의 event에 같은 action 메서드 추가 가능

참고사이트

Comments