UIControl

Panther·2021년 8월 19일
0

https://developer.apple.com/documentation/uikit/uicontrol

"The base class for controls, which are visual elements that convey a specific action or intention in response to user interactions."

사용자 상호작용에 대한 응답으로 특정 액션 혹은 의도를 전달하는 시각적 요소인 컨트롤에 대한 베이스 클래스입니다.

Declaration

@MainActor class UIControl : UIView

Overview

컨트롤은 버튼과 슬라이더처럼 네비게이션을 기능하게 하고, 사용자 입력을 수집하고, 컨텐트를 조작하기 위해 앱이 사용할 수 있는 요소를 구현합니다.

Figure 1 Examples of UIKit controls

이 클래스의 인스턴스는 직접 생성하지 않아야 합니다. UIControl 클래스는 커스텀 컨트롤 구현으로 확장하는 서브클래싱 포인트입니다. 동작을 확장 혹은 수정하기 위해 기존 컨트롤 클래스를 서브클래싱 할 수도 있습니다. 예를 들어 터치 이벤트를 직접 추적하거나 컨트롤의 상태가 언제 변경되는지 확인하기 위해 이 클래스의 메소드를 오버라이드 할 수 있습니다.

컨트롤의 상태는 사용자 상호작용 지원을 위한 컨트롤의 모양 및 기능을 결정합니다. 컨트롤은 UIControl.State 타입이 정의하고 있는 몇 가지 상태 중 한 가지가 될 수 있습니다. 앱의 요구에 따라 코드 작성을 통해 컨트롤의 상태를 변경시킬 수 있습니다. 예를 들어 사용자가 컨트롤에 상호작용하는 것을 방지하기 위해 컨트롤을 비활성화할 수 있슨비다. 또한, 사용자 상호작영은 컨트롤의 상태를 변경시킬 수 있습니다.

The Target-Action Mechanism

타깃 액션 메커니즘은 앱에서 컨트롤 사용을 위해 작성하는 코드를 단순화시켜줍니다. 터치 이벤트 추적을 위한 코드 작성 대신 컨트롤의 특정 이벤트에 응답하기 위한 액션 메소드를 작성할 수 있습니다. 예를 들어 슬라이더의 갑 변경에 응답하는 액션 메소드를 작성할 수 있습니다. 컨트롤은 터치 이벤트 입력 추적 및 메소드 호출 시점을 결정에 대한 모든 작업을 처리합니다.

컨트롤에 액션 메소드를 추가할 때 액션 메소드와 해당 메소드를 addTarget(_:action:for:) 메소드에 정의하는 객체를 구체화할 수 있습니다. (인터페이스 빌더에서 타깃과 액션을 설정할 수도 있습니다.) 타깃 객체는 모든 객체가 될 수 있지만 보통은 컨트롤을 포함하고 있는 뷰 컨트롤러의 루트 뷰입니다. 타깃 객체에 nil을 할당하면 컨트롤은 구체화된 액션 메소드를 정의하는 객체를 리스폰더 체인에서 검색합니다.

액션 메소드의 시그니처는 세 가지 형태 중 한 가지입니다. sender 파라미터는 액션 메소드를 호출하는 컨트롤에 상응하며, event 파라미터는 컨트롤 관련 이벤트를 트리거하는 UIEvent 객체에 상응합니다.

Listing 1 Action method signatures

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

시스템은 특정 방법으로 사용자가 컨트롤과 상호작용할 때 액션 메소드를 호출합니다. UIControl.Event 타입은 컨트롤이 알려줄 수 있는 사용자 상호작용의 타입을 정의하고 있고, 이와 같은 상호작용은 대부분 컨트롤 내부에 있는 특정 터치 이벤트와 상관성이 있습니다. 컨트롤을 설정할 때 메소드 호출을 트리거하는 이벤트를 구체화해야 합니다. 액션 메소드에 대한 호출을 트리거하기 위해 touchDown 혹은 touchUpInside 이벤트를 사용할 수 있습니다. 슬라이더의 경우 슬라이더의 값 변경에 대해서만 신경쓰게 될 것입니다. 그렇기 때문에 액션 메소드를 valueChanged 이벤트에 붙이는 것을 선택하게 될 것입니다.

컨트롤의 특정 이벤트가 발생하면 컨트롤은 즉시 모든 관련 액션 메소드를 호출합니다. 현재 UIApplication 객체는 액션 메소드를 디스패치하고, 필요한 경우 리스폰더 체인을 따라 메시지를 처리할 적합한 객체를 찾습니다. 리스폰더 및 리스폰더 체인에 대한 더 많은 정보는 Event Handling Guide for UIKit Apps를 보시기 바랍니다.

Event Handling Guide for UIKit Apps의 링크는 UIKit 링크로 연결됩니다.

Event Handling Guide for UIKit Apps
https://developer.apple.com/documentation/uikit/#//apple_ref/doc/uid/TP40009541

Interface Builder Attributes

Table 1은 UIControl 클래스의 인스턴스에 대한 특성을 리스트로 보여주고 있습니다.

Table 1 Control attributes

AttributeDescription
Alignment컨트롤이 갖는 컨텐트의 수평 및 수직 정렬입니다. 버튼과 텍스트 필드처럼 텍스트 혹은 이미지를 포함하고 있는 컨트롤의 경우 컨트롤의 bounds 내부에서 해당 컨텐트의 위치를 설정하려면 이 특성을 사용해야 합니다.

이러한 정렬 옵션은 컨트롤의 컨텐트에 적용되고 컨트롤 자체에는 적용되지 않습니다. 다른 컨트롤 및 뷰와 함께 컨트롤을 정렬하는 방법에 대한 더 많은 정보는 Auto Layout Guide를 보시기 바랍니다.
Content컨트롤의 초기 상태입니다. 초기에 컨트롤이 활성화, 선택된, 강조된 상태일지를 설정하기 위해 체크박스를 사용하시기 바랍니다.

Auto Layout Guide
https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/index.html
https://velog.io/@panther222128/Getting-Started-1by05tb6

Internationalization

UIControl은 추상 클래스이기 때문에 internationalize 할 수 없습니다. 그러나 UIButton과 같은 서브클래스의 컨텐트는 internationalize 할 수 있습니다. 특정 컨트롤에 대한 internationalize 정보는 해당 컨트롤의 레퍼런스를 보시기 바랍니다.

Accessibility

기본값으로 컨트롤은 접근 가능한 것입니다. 유요하려면 접근 가능한 UI 요소가 스크린 위치, 이름, 동작, 값, 타입에 대한 정확하고 도움이 되는 정보를 제공해야 합니다. 이러한 정보는 보이스오버가 사용자에게 읊어주는 정보입니다. 시각적 결함이 있는 사용자는 기기 사용을 위해 보이스오버에 의존합니다.

컨트롤은 아래 접근성 특성을 지원합니다.

  • Label. 컨트롤 혹은 뷰를 간략하게 설명하는 짧은, 로컬화된 단어 혹은 문구입니다. 요소의 타입은 식별하지 않습니다. 예시는 추가, 재생입니다.
  • Traits. 하나 혹은 하나 이상의 개별적인 특성 조합입니다. 각각은 요소의 상태, 동작, 사용의 한 가지 측면을 설명합니다. 키보드 키와 선택된 상태처럼 동작하는 요소를 설명하기 위해 키보드 키와 선택된 특성의 조합을 사용할 수 있습니다.
  • Hint. 요소에 대한 액션의 결과를 설명하는 짧은, 로컬화된 문구입니다. 예시는 제목 추가, 쇼핑 리스트 열기입니다.
  • Frame. CGRect 구조체가 요소의 스크린 위치 및 크기를 구체화하는, 스크린 좌표에서의 요소 프레임입니다.
  • Value. 레이블이 값을 나타내고 있지 않을 때 요소의 현재 값입니다. 예를 들어 슬라이더를 위한 레이블은 '속도'일테지만 현재 값은 50%일 것입니다.

UIControl 클래스는 값 및 프레임 특성을 위한 기본값 컨텐트를 제공합니다. 많은 컨트롤이 자동으로 추가적인 특적 특성 또한 가능하게 해줍니다. 코드 작성을 통해 다른 접근성 특성을 설정할 수 있으며, 인터페이스 빌더에 있는 아이덴티티 인스펙터에서도 설정할 수 있습니다.

접근성 특성에 대한 더 많은 정보는 Accessibility Programming Guide for iOS를 보시기 바랍니다.

Subclassing

UIControl을 서브클래싱하는 것은 내장된 타기 액션 메커니즘 및 단순화된 이벤트 처리 지원에 접근할 수 있도록 해줍니다. 기존 컨트롤을 서브클래싱하 ㄹ수 있고 두 가지 방법으로 동작을 수정할 수 있습니다.

  • 컨트롤의 관련 타깃에 대한 액션 메소드의 티스패치를 관찰하거나 수정하기 위해 기존 서브클래스의 sendAction(_:to:for:) 메소드를 오버라이드 할 수 있습니다. 구체화된 객체, 셀렉터, 이벤트에 대한 디스패치 동적을 수정하기 위해 이 메소드를 사용할 수 있습니다.
  • 컨트롤에서 발생하는 터치 이벤트 추적을 위해 beginTracking(_:with:), continueTracking(_:with:), endTracking(_:with:), cancelTracking(with:) 메소드를 오버라이드 할 수 있습니다. 추가적인 액션을 수행하기 위해 추적 정보를 사용할 수 있습니다. 터치 이벤트를 추적하려면 UIResponder 클래스가 정의하는 메소드 대신 이 메소드를 사용하시기 바랍니다.

UIControl을 직접 서브클래싱하면 서브클래스는 컨트롤의 시각적 모양을 설정하고 관리해야 하는 책임이 있습니다. 컨트롤의 상태 업데이트를 위해, 그리고 컨트롤의 값이 변경되었을 때 액션을 보내기 위해 추적하는 이벤트에 대해서 메소드를 사용하시기 바랍니다.

See Also


Controls

UIButton

사용자 상호작용에 응답해 커스텀 코드를 실행하는 컨트롤입니다.

https://developer.apple.com/documentation/uikit/uibutton
https://velog.io/@panther222128/UIButton

UIColorWell

컬러 피커를 표시하는 컨트롤입니다.

https://developer.apple.com/documentation/uikit/uicolorwell
https://velog.io/@panther222128/UIColorWell

UIDatePicker

날짜 및 시간 값 입력을 위한 컨트롤입니다.

https://developer.apple.com/documentation/uikit/uidatepicker
https://velog.io/@panther222128/UIDatePicker

UIPageControl

각각이 앱의 문서 혹은 다른 데이터 모델 엔티티에 상응하는 점의 연속을 수평으로 표시하는 컨트롤입니다.

https://developer.apple.com/documentation/uikit/uipagecontrol
https://velog.io/@panther222128/UIPageControl

UISegmentedControl

여러 세그먼트를 구성하는 수평 컨트롤이며, 각 세그먼트는 이산적 버튼처럼 기능합니다.

https://developer.apple.com/documentation/uikit/uisegmentedcontrol
https://velog.io/@panther222128/UISegmentedControl

UISlider

값의 연속적 범위로부터 하나의 값을 선택하기 위한 컨트롤입니다.

https://developer.apple.com/documentation/uikit/uislider
https://velog.io/@panther222128/UISlider

UIStepper

값의 증가 혹은 감소를 위한 컨트롤입니다.

https://developer.apple.com/documentation/uikit/uistepper
https://velog.io/@panther222128/UIStepper

UISwitch

온/오프처럼 이진 선택을 제공하는 컨트롤입니다.

https://developer.apple.com/documentation/uikit/uiswitch
https://velog.io/@panther222128/UISwitch


0개의 댓글