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."
사용자 상호작용에 대한 응답으로 특정 액션 혹은 의도를 전달하는 시각적 요소인 컨트롤에 대한 베이스 클래스입니다.
@MainActor class UIControl : UIView
컨트롤은 버튼과 슬라이더처럼 네비게이션을 기능하게 하고, 사용자 입력을 수집하고, 컨텐트를 조작하기 위해 앱이 사용할 수 있는 요소를 구현합니다.
Figure 1 Examples of UIKit controls
이 클래스의 인스턴스는 직접 생성하지 않아야 합니다. UIControl
클래스는 커스텀 컨트롤 구현으로 확장하는 서브클래싱 포인트입니다. 동작을 확장 혹은 수정하기 위해 기존 컨트롤 클래스를 서브클래싱 할 수도 있습니다. 예를 들어 터치 이벤트를 직접 추적하거나 컨트롤의 상태가 언제 변경되는지 확인하기 위해 이 클래스의 메소드를 오버라이드 할 수 있습니다.
컨트롤의 상태는 사용자 상호작용 지원을 위한 컨트롤의 모양 및 기능을 결정합니다. 컨트롤은 UIControl.State
타입이 정의하고 있는 몇 가지 상태 중 한 가지가 될 수 있습니다. 앱의 요구에 따라 코드 작성을 통해 컨트롤의 상태를 변경시킬 수 있습니다. 예를 들어 사용자가 컨트롤에 상호작용하는 것을 방지하기 위해 컨트롤을 비활성화할 수 있슨비다. 또한, 사용자 상호작영은 컨트롤의 상태를 변경시킬 수 있습니다.
타깃 액션 메커니즘은 앱에서 컨트롤 사용을 위해 작성하는 코드를 단순화시켜줍니다. 터치 이벤트 추적을 위한 코드 작성 대신 컨트롤의 특정 이벤트에 응답하기 위한 액션 메소드를 작성할 수 있습니다. 예를 들어 슬라이더의 갑 변경에 응답하는 액션 메소드를 작성할 수 있습니다. 컨트롤은 터치 이벤트 입력 추적 및 메소드 호출 시점을 결정에 대한 모든 작업을 처리합니다.
컨트롤에 액션 메소드를 추가할 때 액션 메소드와 해당 메소드를 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
Table 1은 UIControl
클래스의 인스턴스에 대한 특성을 리스트로 보여주고 있습니다.
Table 1 Control attributes
Attribute | Description |
---|---|
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
UIControl
은 추상 클래스이기 때문에 internationalize 할 수 없습니다. 그러나 UIButton
과 같은 서브클래스의 컨텐트는 internationalize 할 수 있습니다. 특정 컨트롤에 대한 internationalize 정보는 해당 컨트롤의 레퍼런스를 보시기 바랍니다.
기본값으로 컨트롤은 접근 가능한 것입니다. 유요하려면 접근 가능한 UI 요소가 스크린 위치, 이름, 동작, 값, 타입에 대한 정확하고 도움이 되는 정보를 제공해야 합니다. 이러한 정보는 보이스오버가 사용자에게 읊어주는 정보입니다. 시각적 결함이 있는 사용자는 기기 사용을 위해 보이스오버에 의존합니다.
컨트롤은 아래 접근성 특성을 지원합니다.
CGRect
구조체가 요소의 스크린 위치 및 크기를 구체화하는, 스크린 좌표에서의 요소 프레임입니다.UIControl
클래스는 값 및 프레임 특성을 위한 기본값 컨텐트를 제공합니다. 많은 컨트롤이 자동으로 추가적인 특적 특성 또한 가능하게 해줍니다. 코드 작성을 통해 다른 접근성 특성을 설정할 수 있으며, 인터페이스 빌더에 있는 아이덴티티 인스펙터에서도 설정할 수 있습니다.
접근성 특성에 대한 더 많은 정보는 Accessibility Programming Guide for iOS를 보시기 바랍니다.
UIControl
을 서브클래싱하는 것은 내장된 타기 액션 메커니즘 및 단순화된 이벤트 처리 지원에 접근할 수 있도록 해줍니다. 기존 컨트롤을 서브클래싱하 ㄹ수 있고 두 가지 방법으로 동작을 수정할 수 있습니다.
sendAction(_:to:for:)
메소드를 오버라이드 할 수 있습니다. 구체화된 객체, 셀렉터, 이벤트에 대한 디스패치 동적을 수정하기 위해 이 메소드를 사용할 수 있습니다.beginTracking(_:with:)
, continueTracking(_:with:)
, endTracking(_:with:)
, cancelTracking(with:)
메소드를 오버라이드 할 수 있습니다. 추가적인 액션을 수행하기 위해 추적 정보를 사용할 수 있습니다. 터치 이벤트를 추적하려면 UIResponder
클래스가 정의하는 메소드 대신 이 메소드를 사용하시기 바랍니다.UIControl
을 직접 서브클래싱하면 서브클래스는 컨트롤의 시각적 모양을 설정하고 관리해야 하는 책임이 있습니다. 컨트롤의 상태 업데이트를 위해, 그리고 컨트롤의 값이 변경되었을 때 액션을 보내기 위해 추적하는 이벤트에 대해서 메소드를 사용하시기 바랍니다.
사용자 상호작용에 응답해 커스텀 코드를 실행하는 컨트롤입니다.
https://developer.apple.com/documentation/uikit/uibutton
https://velog.io/@panther222128/UIButton
컬러 피커를 표시하는 컨트롤입니다.
https://developer.apple.com/documentation/uikit/uicolorwell
https://velog.io/@panther222128/UIColorWell
날짜 및 시간 값 입력을 위한 컨트롤입니다.
https://developer.apple.com/documentation/uikit/uidatepicker
https://velog.io/@panther222128/UIDatePicker
각각이 앱의 문서 혹은 다른 데이터 모델 엔티티에 상응하는 점의 연속을 수평으로 표시하는 컨트롤입니다.
https://developer.apple.com/documentation/uikit/uipagecontrol
https://velog.io/@panther222128/UIPageControl
여러 세그먼트를 구성하는 수평 컨트롤이며, 각 세그먼트는 이산적 버튼처럼 기능합니다.
https://developer.apple.com/documentation/uikit/uisegmentedcontrol
https://velog.io/@panther222128/UISegmentedControl
값의 연속적 범위로부터 하나의 값을 선택하기 위한 컨트롤입니다.
https://developer.apple.com/documentation/uikit/uislider
https://velog.io/@panther222128/UISlider
값의 증가 혹은 감소를 위한 컨트롤입니다.
https://developer.apple.com/documentation/uikit/uistepper
https://velog.io/@panther222128/UIStepper
온/오프처럼 이진 선택을 제공하는 컨트롤입니다.
https://developer.apple.com/documentation/uikit/uiswitch
https://velog.io/@panther222128/UISwitch