[ios] UIControl
안녕하세요. 현재 저는 Understanding Event Handling, Responders, and the Responder Chain 문서를 읽어보며 이벤트 핸들링에 대해 보다 자세히 알기 위해 공부를 하고 있습니다.
이를 위해 문서를 읽으면서 공부하고 알게 된 몇 가지 내용들을 정리해고자 합니다. 오늘은 바로 UIControl
입니다. 그럼 바로 시작해보도록 하겠습니다.
UIControl
UIControl
은 간단히 설명하자면 특정 액션이나 사용자의 의도(드래그, 버튼 클릭 등등)를 전달하는 시각적인 요소들의 기반이 되는 클래스입니다. UIControl
클래스를 상속하는 클래스로는 대표적으로 UIButton
클래스가 있습니다. UIButton
의 문서를 UIControl
을 상속한다고 명시되어 있습니다.
즉 사용자에게 보여지는 뷰가 보다 사용자와 상호작용할 수 있게끔 능력을 부여해주는 클래스이기도 합니다. UIControl
은 Target-Action이라는 매커니즘을 이용해 사용자의 액션들을 앱에 전달합니다.
이 Target-Action 매커니즘은 addTarget(_:action:for:)
메소드를 이용하여 구현합니다. 파라미터로 액션을 담당할 객체, 액션에 대한 행위를 정의해준 메소드, 그리고 어느 액션(.touchUpInsider
, .valueChanged
등등)에 대해 해당 메소드를 호출할 것인지를 넘겨줍니다.
또한 UIControl
클래스의 속성에는 상태라는 속성이 존재하는데 이 상태는 해당 뷰의 모습과 사용자의 액션에 대한 기능을 결정하는 역할을 합니다. 이 상태라는 속성은 사용자의 액션에 대해 원하는대로 직접 구현해줄 수 있습니다. 당연히 이렇게 설명을 하면 와닿지 않을 수 있습니다. 예를 들어보도록 하겠습니다.
위에서 언급했듯이 UIControl
을 상속받는 대표적인 뷰는 바로 UIButton
클래스입니다. UIButton
를 다루어보셨다면 다음과 같은 메소드들을 많이 보셨을 것입니다.
func setTitle(String?, for: UIControl.State)
- 상태에 따른 타이틀을 지정해주는 메소드
func setImage(UIImage?, for; UIControl.State)
- 상태에 따른 이미지를 지정해주는 메소드
func setTitleColor(UIColor?, for: UIControl.State)
- 상태에 따른 타이틀의 색을 지정해주는 메소드