2009-04-05 4 views
3

내 하위 클래스의 UIView는 터치 이벤트를 처리하고 터치가 시작될 때 추적이 발생할 때 내부 값을 업데이트합니다.UIKIt에서 사용자 정의 컨트롤을 어떻게 작성합니까?

내보기 컨트롤러가이 사용자 지정보기를 화면에로드합니다. 내 사용자 정의 컨트롤의 값 변경을 수신 대기하도록 내 View Controller를 설정하는 가장 좋은 방법은 무엇입니까?

+0

죄송합니다. 그 답변을 작성한 직후에 잠이 들었습니다. 지금 내 대답을 업데이트했습니다. –

답변

8

당신은 할 수 있습니다

  1. 컨트롤러의 대리자 메서드를 구현하고보기에서 호출, 또는
  2. 서브 클래스 UIControl를 대신하여 컨트롤러에 UIControlEvent들 보내

때 값의 변화를 (또는 사용자가 귀하의 컨트롤과 상호 작용할 때).

보기가 사용자로부터 입력 형식을 얻는 데 사용되는 경우 UIControl을 서브 클래 싱하는 것이 더 나은 방법입니다. 아이폰 참조 라이브러리에서

:

UIControl는 컨트롤의 기본 클래스입니다 : 응용 프로그램에 사용자의 의도를 전달하는 데 사용되는 버튼과 슬라이더 등의 객체.

따라서 UIViewUIControl의 가장 중요한 차이는 사용자의 의도가 전달되었는지 여부입니다. UIView은 정보를 표시하기위한 것이고 UIControl은 사용자 입력을 수집하기위한 것입니다.

UPDATE : 사용자 지정 뷰의 인터페이스에서

같이 대리자를 정의 :

@interface MyView : UIView { 
    id delegate; 
} 
@property (assign) id delegate; 
@end 

대리자 패턴으로 이동하기로 결정하는 경우, 여기에 코드가 같이하는 방법입니다 구현시

@synthesize입니다. 이어서

MyView myView = [[MyView alloc] init]; 
[myView setDelegate:self]; 

, 사용자는, 아마도 값 변화의 관점에서이를 (touchesBegan에서 예) 뷰와 상호 작용할 때마다 :보기 제어기

는 위임 될 제어기를 설정 : 또한 코코아 기초 가이드에 Delegates and Data Sources를 살펴 할 수 있습니다

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    // Possibly change the values 
    if([delegate respondsToSelector:@selector(valuesChanged)]) { 
     [delegate valuesChanged]; 
    } 
} 

.

+0

selam, 내 질문과 같습니다. 마지막 두 가지 질문을 볼 수 있었습니까? 여전히 좋은 반응이 없었습니다. 귀하의 의견을 고맙게 생각합니다. http://stackoverflow.com/questions/6597997/iphone-application-object-oriented-design-ideas – Spring

관련 문제