2010-06-16 7 views
1

뷰에 사용자 정의 서브 뷰가있는 UIViewController가 있습니다.서브 뷰 터치 이벤트 발생시 뷰 컨트롤러에 알리기

이 사용자 정의 하위 뷰는 터치 이벤트를 추적하고 스 와이프 제스처를보고해야합니다.

현재 touchesBegan, touchesMoved, touchesEnded 및 touches를 subview 클래스에서 삭제했습니다. 추가 로직을 사용하면 스 와이프 제스처를 얻을 수 있으며 handleRightSwipe 및 handleLeftSwipe 메서드를 호출 할 수 있습니다. 이제 서브 뷰 내에서 스 와이프하면 로컬 스 와이프 처리 메서드가 호출됩니다. 이 모든 것이 잘 작동합니다.

하지만 실제로 필요한 것은 handleRightSwipe 및 handleLeftSwipe 메소드가 뷰 컨트롤러에 있어야합니다. 나는 하위 뷰 클래스에서 그것들을 남겨 둘 수있다. 그렇지만 모든 논리와 데이터를 가져와야 만한다. 그리고 그런 종류의 MVC 아이디어를 깨뜨린다.

제 질문은 이것을 처리 할 수있는 확실한 방법입니까? 본질적으로 나는 하위 뷰에서 터치 이벤트 메서드를 유지하여 해당 특정 뷰에 대해서만 트리거하도록하고 싶습니다. 그러나 이러한 터치 이벤트 (또는이 경우 스 와이프 제스처)가 발생할 때보기 컨트롤러에 알리고 싶습니다.

아이디어가 있으십니까?

감사합니다.

UPDATE :

내가 (초기에) 통지의 관찰자로 내보기 컨트롤러를 설정 : 헨릭의 제안을 사용

, 여기에 내가 (당신에게 독서를 저장하기 위해) 무엇을했는지의 빠른 샘플입니다 .

// NOTIFICATION_LEFT_SWIPE is defined as some unique string elsewhere. 
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 

// Note that imageView is the instance of my subview that is calling the notification. 
// You can set this to nil if you don't want it to be specific. 
[nc addObserver:self selector:@selector(handleLeftSwipe) name:@NOTIFICATION_LEFT_SWIPE object:imageView]; 

그런 다음 handleLeftSwipe 메소드를 구현합니다. 이것은 통지가 수신 될 때 호출됩니다.

// Note that NOTIFICATION_LEFT_SWIPE is the same one used in the view controller 
// I put this in a global header I use. This is how you keep track of notifications. 
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
[nc postNotificationName:@NOTIFICATION_LEFT_SWIPE object:self]; 

및 유사 권리 슬쩍에 대한

:

지금 내 하위 뷰에서 나는 슬쩍 제스처를 수신 알림을 보냅니다.

답변

1

Notification Center을 사용하여 다른 (관찰) 개체에 알림을 보낼 수 있습니다.

+0

아 감사합니다! 이것은 완벽하게 작동했습니다. 전에 알림 센터에 대해서도 들어 본 적이 없지만 정확히 필요한 것은 수행합니다. – nebs

1

OS 3.2 이상에서 사용할 수있는 제스처 인식 시스템을 사용할 수도 있습니다. 제스처 인식기를 사용하면 터치 처리를 뷰 클래스에서 분리 할 수 ​​있으며 여기에서하는 일과 거의 비슷하게 디자인 할 수 있습니다. 이 경우 UIPanGestureRecognizer 인스턴스를 만들고 (보통 -addTarget:action: 구문을 사용하여) 컨트롤러를 인식기의 대상으로 추가 한 다음 -addGestureRecognizer:으로보기에 인식기를 추가합니다. 그러면 컨트롤러가 사용자가보기에서 스 와이프 할 때 일련의 동작 메시지를받으며 인식 자의 -translationInView: 메서드를 호출하여 움직임을 확인할 수 있습니다.

관련 문제