iOS/Framework

UIControl, UIControl.state, UIControl.Event

DevBabamba 2018. 6. 9. 01:46
반응형

UIControl, UIControl.state, UIControl.Event 부분에 대해 번역하였습니다.

의역 오역 많습니다. 감안하고 보세요~

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





UIControl

  • 컨트롤들을 위한 베이스 클래스는 사용자 상호작용에 반응하는 특정 액션 또는 의도를 전달하는 시각적 요소들이다.

Overview

  • 컨트롤들은 네비게이션을 가능하게 하거나, 사용자의 인풋을 모으거나 컨텐츠를 규정할 경우 버튼들과 슬라이더 같은 요소들을 실행한다.
  • 컨트롤들은 앱에서 사용자 상호작용들을 보고 받기 위해 Target - Action 메커니즘을 사용한다.

그림 1 UIKit 컨트롤의 예

  • 이 클래스의 instance들을 직접적으로 생성하지 마라.
  • UIControl 클래스는 커스텀 컨트롤들을 실행하기 위해 확장하는 서브클래싱(하위) 포인트이다.
  • 하위 기존 컨트롤 클래스들의 behavior를 확장 또는 수정할 수 있다.
    • 예를 들면 , 터치 이벤트들을 따라가기 위해 또는 컨트롤의 상태가 변하는 경우를 결정하기 위해 이 클래스의 메소드들을 오버라이드할 수 있다.
  • 컨트롤의 상태는 사용자 상호작용들을 지원하는 외관과 기능으로 결정한다

  • 컨트롤들은 UIControlState 타입으로 정의되는 여러 상태들 중 하나일 수 있다.

  • 앱에서 필요로 하는것을 기초로 프로그래밍방식으로 컨트롤의 상태를 바꿀수있다.

    • 예를 들면, 상호작용을 사용자와 막기 위해 컨트롤을 비활성화 할 수 있다.
  • 사용자 상호작용들은 컨트롤 상태를 바꿀 수 있다.

Target - Action 메카니즘

  • 컨트롤들은 코드에서 일어나는 이벤트들을 보고하기 위해 Tartget - Action메카니즘을 사용한다.

  • Target - Action 메카니즘은 앱에 컨트롤들을 사용하기 위해 적을 때 코드를 단순화한다.

  • 터치이벤트를 추적하기 위해 쓰여지는 코드를 대신하여, Control - specific 이벤트들에 반응하는 액션 메소드를 적는다.

    • 에를 들면, 슬라이더의 값을 변화하기 위해 반응하는 액션 메소드를 적을 수 있다.
  • 컨트롤은 들어오는 터치 이벤트들을 추적하는 그리고 메소드가 불릴 때 결정하는 모든 작업을 다룬다.

  • 컨트롤에 액션 메소드를 추가하는 경우, 액션 메소드와 메소드를 정의하는 객체를 모두 addTarget(_ :action:for)메서드에 특정하라.

  • 타겟 객체는 모든 객체일 수 있다, 그러나 컨트롤을 포함하는 view controller의 루트 view가 일반적이다.

  • 만약, 타겟 객체에 대해 nil을 설정했다면, 컨트롤은 특정 액션 메소드를 정의한 객체의 리스폰더 체인을 검색한다.

  • 액션 메소드의 특징은 아래 Listing 1의 세가지 형태중 하나이다.

  • sender 파라미터는 액션 메소드를 호출하는 컨트롤에 부합한다. 그리고 event 파라미터는 컨트롤 관련 이벤트를 트리거한 UIEvent 객체에 부합한다.

Listing 1 Action method definitions

@IBAction func doSomething()
@IBAction func doSomething(sender: UIButton)
@IBAction func doSomething(sender: UIButton, forEvent event: UIEvent)
  • 액션 메소드는 사용자가 컨트롤과 특정한 방법으로 상호작용할 때 호출된다.

  • UIControl.Event 타입은 컨트롤을 보고할 수 있는User interactions의 타입을 정의하고, 이들 interaction들은 일반적으로 컨트롤의 특정 이벤트들에 관련 되어있다.

  • 컨트롤을 구성할 때, 메소드 호출을 촉발시키는 이벤트를 지정해야한다.

  • 버튼 컨트롤의 경우, 액션 메소드 호출을 촉발시키기 위해 touchDown 또는 touchUpInside 이벤트를 사용한다.

  • 슬라이더의 경우, 슬라이더의 값의 변화들에 대해서 고려할 수 있고 그래서 액션 메소드에 valueChanged 이벤트들을 연결하는것을 선택할 수 있다.

  • 컨트롤 관련 이벤트가 발생할 때, 컨트롤은 모든 관련된 액션 메소드를 즉시 호출한다.

  • 액션 메소드들은 현재 UIApplicaton 객체를 통해 전달된다. 필요한 경우 리스폰더 체인을 따라 메시지를 다루는 적절한 객체를 찾는다.

  • 리스폰더와 기스폰더 체인에 대한 많은 정보의 경우는 Event Handling Guide for UIKit Apps를 보라.

Interface Builder Attributes

  • Table 1 UIControl 클래스의 인스턴스들과 관련된 속성들의 목록이다.

Table 1 Control attributes

AttributeDescription
Alignment컨트롤 내용의 수평과 수직의 맞춤(alignment).

버튼들과 텍스트 필드들과 같은 텍스트 또는 이미지들의 컨트롤의 경우, 컨트롤의 바운스 내의 내용의 포지션을 구성하기 위헤 이들 속성들을 사용한다.

이들alignment 옵션들은 컨트롤 자신이 아닌 컨트롤의 내용에 적용한다.Auto Layout Guide를 보시오.
Content컨트롤의 초기 상태. 처음에 컨트롤의 enabled(활성화), selected(선택) 또는 highlighted(강조) 여부를 구성하기 위해 체크박스들을 사용한다.

Internationalization

  • UIControl은 추상 클래스 이므로, 구체적으로 국제화 하지 하는다. 그러나 UIButton과 같은 서브클래스의 내용은 국제화한다.
  • 국제화하는 특정 컨트롤의 정보의 경우 컨트롤 레퍼런스를 보라.

접근성

  • 컨트롤들은 기본적으로 접근할 수 있다. 유용하게 쓰려면, 접근할 수 있는 사용자 인터페이스(user interface) 요소는 스크린 위치, 이름, 해동, 값, 그리고 타입에 대한 정확하고 도움되는 정보를 제공해야한다.
  • 시각 장애가 있는 사용자들은 VoiceOver를 사용하여 기기 사용을 의존할 수 있다.
  • 컨트롤들은 다음의 접근성 속성들을 제공한다.

    • Label : 짧고, 컨트롤 또는 뷰를 간결하게 묘사하는 현지화된 글자 또는 구(pharse), 그러나 요소의 타입은 확인하지 않는다. "Add" 또는 "Paly"가 예이다.
    • Traits : 요소의 상태, 행동, 용도의 한 측면을 묘사하는 각각의 하나 이상의 개별적 특성들의 조합. 예를 들어, 키보드의 키와 같이 행동하고 현재 선택된 요소는 키보드의 키와 선택된 특성들의 조합에 의해 특징지어질 수 있다.
    • Frame : 요소의 스크린 위치와 사이즈로 지정한 CGRect structure에 의해 주어진 스크린 좌표 안의 요소의 프레임.
    • Value : 값이 라벨에 의해 대표되어진 경우가 아닌때, 요소의 현재 값. 예를 들면, 슬라이더의 라벨은 "속도"이지만, 그것의 현재값은 "50%"일 수 있다.
  • UIControl 클래스는 값과 프레임 속성들의 기본 내용을 제공한다.

  • 많은 컨트롤은 자동으로 추가적인 특정 특성들을 가능하게 한다.

  • 다른 접근 속성들을 프로그래밍 방식 또는 Interface Builder에서 identity inspector를 사용하는것으로 구성할 수 있다.

Subclassing Notes

  • UIControl 서브클래싱은 built-in target-action 메카니즘에 접근하고 이벤트 처리 지원을 단순화한다.
  • 기존의 컨트롤과 수정된 그것의 행동을 아래 두가지 방법으로 서브클래스 할 수 있다.
    • 컨트롤의 관련된 타겟들에 액션 메소드를 전달하는 것을 감시하거나 변경하기 위한 기존 서브클래스의 sendAction (_ : to : for :) 메소드를 오버라이드 하라.
    • 컨트롤에서 발생한 터치 이벤트를 추적하는 beginTracking(:with:), continueTracking(:with:), endTracking(_:with:), 그리고 cancelTracking(with:) 메소드를 오버라이드 하라. 추가적 액션을 실행하기 위한 트레킹 정보를 사용할 수 있다. UIResponder 클래스에 의해 정의된 메소드를 대신하여 터치 이벤트를 추적하기 위해 항상 이들 메소드를 사용하라.
  • 만약 직접 UIControl을 서브클래스 한다면, 서브클래스가 컨트롤의 시각적 모양을 설정하고 관리하는 책임이있다.
  • 컨트롤의 값이 변할 때 컨트롤의 상태를 업데이트 하고 액션을 보내기 위한 트레킹 이벤트의 메소드를 사용하라.

UIControl.State

  • 컨트롤의 상태를 기술하는 정수

Overview

  • 컨트롤은 한번에 둘 이상의 상태를 가질 수 있다.
  • 컨트롤은 그들의 상태에 따라 다르게 구성될 수 있다.
  • 예를 들면, UIButton 객체는 일반 상태일 때의 이미지와 강조된 때에 다른 이미지를 보이기 위해 구성될 수 있다.

Constants

  • normal : 컨트롤의 일반 또는 기본 상태. 
  • highlighted : 컨트롤의 강조된 상태.
  • disabled : 컨트롤의 비활성 상태.
  • selected : 컨트롤의 선택된 상태.
  • focused : 컨틀롤의 포커스된 상태.
  • application : 응용 프로그램에서 사용할 수 있는 추가 제어 상태 플래그.
  • reserved : 내부 프레임 워크 사용을 위해 예약된 제어 상태 플래그.

UIControl.Event

컨트롤을 위한 이벤트들의 타입들을 설명하는 정수

Overview

  • 타겟과 액션을 하나 이상의 제어 이벤트들과 연결하여 타겟 객체에 액션 메시지를 보내는 컨트롤을 설정한다.
  • 이것을 하려면, 원하는 특정 각 Target - Action쌍을 위한 컨트롤에 AddTarget(_:action:for:):를 보낸다

Constants

  • touchDown

    • 컨트롤을 터치했을 때 발생하는 이벤트
  • touchDownRepeat

    • 컨트롤을 연속 터치 할 때 발생하는 이벤트
    • 이 이벤트는 UITouch tapCount 메소드의 값이 1보다 크다. 
  • touchDragInside

    • 컨트롤 범위 내에서 터치한 영역을 드래그 할 때 발생하는 이벤트
  • touchDragOutside

    • 터치 영역이 컨트롤의 바깥쪽에서 드래그 할 때 발생하는 이벤트
  • touchDragEnter

    • 터치 영역이 컨트롤의 일정 영역 바깥쪽으로 나갔다가 다시 들어왔을 때 발생하는 이벤트
  • touchDragExit

    • 터치 영역이 컨트롤의 일정 영역 바깥쪽으로 나갔을 때 발생하는 이벤트 
  • touchUpInside

    • 컨트롤 영역 안쪽에서 터치 후 뗐을때 발생하는 이벤트
  • touchUpOutside

    • 컨트롤 영역 안쪽에서 터치 후 컨트롤 밖에서 뗐을때 이벤트
  • touchCancel

    • 터치를 취소하는 이벤트 (touchUp 이벤트가 발생되지 않음)
  • valueChanged

    • 터치를 드래그 및 다른 방법으로 조작하여 값이 변경되었을때 발생하는 이벤트
  • primaryActionTriggered

    • 버튼이 눌릴때 발생하는 이벤트
  • editingDidBegin

    • UITextField에서 편집이 시작될 때 호출되는 이벤트
  • editingChanged

    • UITextField에서 값이 바뀔 때마다 호출되는 이벤트
  • editingDidEnd

    • UITextField에서 외부객체와의 상호작용으로 인해 편집이 종료되었을 때 발생하는 이벤트
  • editingDidEndOnExit

    • UITextField의 편집상태에서 키보드의 return 키를 터치했을 때 발생하는 이벤트
  • allTouchEvents

    • 모든 터치 이벤트
  • allEditingEvents

    • UITextField에서 편집작업의 이벤트
  • applicationReserved

    • 각각의 애플리케이션에서 프로그래머가 임의로 지정할 수 있는 이벤트 값의 범위
  • systemReserved

    • 프레임워크 내에서 사용하는 예약된 이벤트 값의 범위
  • allEvents

    • 시스템 이벤트를 포함한 모든 이벤트


반응형