2012-10-22 3 views
2

원시 ios 개발에서 매우 기본적인 문제에 대한 솔루션을 찾고 있습니다.iOS에서 터치 이벤트 전파

나는 그런 설정이 의 UIViewController (전체 화면) ----> UIView의 부모 (전체 화면) ---->의 UIView - 자식 (전체 화면)

가있는 UIView - 자식이 이벤트에 가입 한 한 UITapGestureRecognizer 및 UIView-Parent가 이벤트를 구독했습니다. touchesBegan : withEvent

화면의 아무 곳이나 탭하면 UIView-Parent와 UIView-Parent가 서로 다른 이벤트를 수신하므로 이벤트가 UIView-Child로 이동합니다.

하지만 내가 필요한 것은 모든 이벤트가 UIView-Child 자체에서 중단되고 UIView-Parent로 전파되지 않는다는 것입니다.

빈 함수를 사용하여 UIView-Child에 모든 이벤트 리스너를 구현하는 것도 한 가지 방법이지만, 더 나은 방법이 있어야합니다. 누군가가 나를 도울 수 있습니까?

내 질문에 두 번째 부분이 있습니다. UIView-Parent가 UITapGestureRecognizer 이벤트를 인식하기 시작한 다음 UIView-Child가 UIView-Child를 구현하면 UIView-Parent로 전파되지 않습니다. 필요한 경우이 방법을 UIView-Child에서 UIView-Parent로 전달할 수 있습니다.

[parentView setUserInteractionEnabled:FALSE]; 

를 완료하고이 역 : 당신은 당신이 할 수있는 아이를 표시 할 때, 부모에게 감동을 받고 피하기 위해

답변

3

. 나는 이것이 가장 쉬운 방법이라고 생각한다.

또한 제스처 인식기를 사용할 때 터치 전송을 방지/허용하는 좋은 방법은 해당 제스처에 맞는 값을 설정하는 것입니다. 이와 같이 :

[gestureRecognizer setDelaysTouchesBegan:TRUE]; 
[gestureRecognizer setDelaysTouchesEnded:TRUE]; 
[gestureRecognizer setCancelsTouchesInView:TRUE]; 

값은 달성하려는 목표에 따라 달라질 수 있습니다.

희망이 도움이됩니다.

건배!

+0

setUserInteractionsEnabled 호출 : iOS 6.1에서 NO가 작동하지 않습니다. 하위보기의 터치 제스처 인식기는 더 이상 터치 이벤트를 발생시키지 않습니다! 부모 뷰가 움직이는 터치를 인식하기 때문에 setDelaysTouchesBegin/Ended는 충분하지 않습니다. – webjprgm

+0

터치 할 때 'userInteractionEnabled'값을 기록하십시오. NO로 설정하면 그 다음에 YES로 설정하면 도움이되지 않습니다. 또한 다른 사람들이 코드에서 어떤 일이 발생했는지 알 수 있도록보기 계층 구조를 설명하십시오. – George