[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)- 상태에 따른 타이틀의 색을 지정해주는 메소드