2012-02-22 4 views
1

아래 그림과 같은 사용자 지정 컨트롤을 만듭니다.iOS 사용자 지정 컨트롤

enter image description here

그것은 기본적으로 슬라이더와 메뉴가 될 것입니다. 화살표를 사용하면 슬라이더 트랙에서 3 일간의 공연을 변경할 수 있습니다. 슬라이더로 선택한 날 Acoording 나는 메인 화면 (이 메뉴는 내 페이지의 하단에 것입니다)에서 일부보기를 변경하려면. 그래서 기본적으로 이것이 내 메인 컨트롤러에서 "듣는다"는 유일한 것입니다 : 언젠가 하루가 선택 되었다면.

내가 작성해야 할 모든 코드를 알아 냈지만 UIControl이나 UIView를 하위 클래스로 분류해야하는지 확실하지 않습니다. 그렇다면 UIControl (UIView)에 내 컨트롤러 코드 (요일 변경, 끌기 효과 추가 등)를 어디에 써야합니까? 또는 UIViewController, 하위 클래스 및 거기에 모든 코드를 작성해야합니다. (그렇다면 첫 번째 방법으로 UIControl (UIView)을 하위 클래스 화해야하는 이유).

기본적으로 내 사용자 지정 컨트롤 (IB에서 수행 한)의보기 인터페이스 외에도 내가 만드는 데 필요한 추가 파일을 알고 싶습니다. 코드 (IBOutlets, IBAction 메서드)를 어디에 두어야합니까? 주보기 컨트롤러와 통신합니다 (주 컨트롤러를 내 사용자 지정 컨트롤의 대리자로 설정 했습니까?).

긴 게시물을 위해 죄송합니다.

감사

답변

4

UIControl을 서브 클래 싱하는 것이 좋습니다. 이 컨트롤을 사용하는 사용자는 [yourControl addTarget:self action:@selector(someMethod:) forControlEvents:UIControlValueChanged];을 사용하여 변경된 값에 대응할 수 있습니다. 귀하의 통제하에, 새로운 날을 선택했으면 [self sendActionsForControlsEvents:UIControlValueChanged];으로 전화하여 흥미로운 모든 수업에 정보를 얻게됩니다.

가능한 한 자체 제어로 유지하십시오. 즉, 필요한만큼의 논리 만 제공하면됩니다. Apple이 제공 한 UI 요소를 사용하는 방법에 대해 생각해보십시오. 귀하의 제품을 일반적인 것으로 만들도록 노력하십시오 (실용적인 경우 여기에서 상식을 사용하십시오). 간단히 말해서,이 컨트롤을 다른 프로젝트 나 앱의 다른 장소에서 유용하게 활용할 수 있도록하려면이 컨트롤을 일반화해야합니다.

+0

대답 해 주셔서 감사합니다. 내 컨트롤의 메서드를 초기화 코드 (예를 들어 UIGestureRecognizer를 만들려면)를 추가해야하는 질문이 하나 더 있습니다. – Cosmin

+0

별도의 질문으로 더 성공적으로 게시 할 수 있습니다. 건배. – picciano

+0

@Cosmin : 제스처 인식기가 컨트롤에 중요하다면 (즉, 컨트롤이 기능을 요구할 때) 컨트롤의 'initWithFrame :'에서 초기화합니다.또는 다른 지정된 초기화 프로그램이있는 경우 제스처 인식 프로그램을 초기화합니다. – DarkDust

2

짧은 대답은 UIControl를 서브 클래스하고 구성 요소를 그리고 거기에 구성 요소와 상호 작용하는 모든 로직을 넣어해야합니다. UIControlUIView에서 상속되며 대상/동작 동작을 추가합니다. 이 방법을 사용하면 sendAction:to:forEvents:UIControlEventValueChanged으로 변경할 수 있습니다.

사용자가 선택한 날짜를 변경할 때 대신 대리인 프로토콜을 구현할 수 있습니다. 예를 들어

: 당신은이 작업이 위젯이 켜져 화면처럼 높은 수준의 뷰를 관리하는 것입니다입니다 때문에 UIViewController을 사용하지 않으

@protocol DateSliderDelegate <NSObject> 
    - (void)dateSlider:(id)slider dateDidChange:(NSDate *)date fromDate:(NSDate *)oldDate; 
@end 

. 나중에 구성 요소를 사용할 때 뷰 컨트롤러를 사용하고 처음에 표시 할 날짜를 설정하고 변경 이벤트를 수신하는 것과 같은 작업을 수행합니다.

+0

감사합니다. – Cosmin