2009-08-25 6 views
0

여러 개의 UILabels과 몇 개의 UITextField로 구성된 자체 컨트롤을 만들고 싶습니다. 문제는 어디서부터 시작해야할지 모르겠습니다. 직접 UIControl을 서브 클래스화한 다음 서브 뷰를 작성하여 init의 기본 뷰에 추가합니다. 아니면 layoutSubviews를 사용합니까? 그리고 drawRect를 재정의해야합니까?UIControl의 서브 클래 싱을 시작할 위치를 파악할 수 없습니다!

서브 뷰 추가를 처리 할 "컨트롤러"클래스를 만드는 데 익숙하지만 UIControl을 서브 클래스로 만들면 어떤 방법으로 설정을 재정의해야할지 확실하지 않습니다!

나는 이것을하기 전에 한번도 해 본 적이 없기 때문에 몇 가지 사실을 고맙게 생각합니다.

건배!

답변

6

UIControl 하시겠습니까? UIControl 클래스는 제한된 이벤트 집합 (예 : "touch"또는 "value changed")을 지원해야하는 버튼 및 텍스트 필드와 같이 매우 단순하고 일반적으로 재사용 할 수있는 컨트롤을 대상으로합니다. 여러보기를 그룹화하는 방법을 만들려고하는 경우 대신 UIView을 사용해야합니다. 어느 경우

, 여기 당신이해야 할 작업은 다음과 같습니다

  1. 당신의 파단을 만들고 -initWithFrame: 자신의 대부분의 속성을 설정합니다. 인스턴스 변수에 저장하고 자기의 하위 뷰로 추가하십시오.

  2. -layoutSubviews에 프레임을 설정하고 self.bounds을 기준으로 계산하십시오. 이는 -initWithFrame: 이후를 포함하여보기의 크기가 변경 될 때마다 호출됩니다.

코어 그래픽 기능이있는 사용자 지정 그리기를 수행해야하는 경우가 아니면 -drawRect:을 구현할 필요가 없습니다.

+0

initWithFrame에서 UILabel과 같은 하위 뷰를 추가하고 layoutSubviews에서 프레임을 설정하면 drawRect를 사용하여 UILabel 아래에 그려진 선과 같은 UI 요소를 추가 할 수 없다는 의미입니까? –

+0

'-drawRect :'를 사용하여 커스텀 Core Graphics (또는 지금은'UIBezierPath') 드로잉을 할 수 있습니다. 그러나이 그림은 모든 하위보기 아래에 있습니다. 하위보기가 불투명하다면'-drawRect : '그림은 보이지 않습니다. 예를 들어, UILabel의 경우 'backgroundColor'가'[UIColor clearColor]'이고'opaque' 속성이'NO'로 설정되어 있는지 확인해야합니다. –