2011-02-04 3 views
2

작은 UIView을 만들었습니다. 두 개의 UIButton이 포함되어 있습니다. 보기는 UITapGesture 이벤트에 응답합니다. 버튼은 TouchUpInside에 응답해야하지만 버튼을 누르면 응답자가 기본보기가되고 탭 제스처 선택자가 트리거됩니다. 조언이나 제안을 찾고 있습니다.UIButton 터치 이벤트가 기본보기로 넘어갑니다.

+0

을 "탭 인식기를 방지하는 모든 탭을 잡을 수있는 유일한 하나가 될 수있는"짧은 사용에

첨부 된 탭 제스처 인식기가있는 UIView. 이것은 내가 버튼이 동작 할 것으로 기대했던 방식대로 작동하는 것 같습니다. – Kyle

답변

0

뷰 계층 구조에서 뷰의 정렬 순서는 어떻게됩니까? 또한 IB에서 인터페이스를 만들고 있습니까? 연결을 올바르게 연결하면 문제가되지 않습니다.

+0

이것은 내가 한 일입니다. – Kyle

0

각 UIView에는 'exclusiveTouch'속성이 있습니다. YES로 설정하면보기가 응답 체인에 터치를 전달하지 않습니다. UIButtons에서이 속성을 설정해보고 차이가 있는지 확인하십시오.

+0

나는 이것을 줄 것이다. – Kyle

0

이 디자인의 문제점은 단추를 다른 단추에 포함하는 것과 비슷하다는 것입니다. 유효한 이유가있을 수 있지만 이벤트 흐름에 더주의해야합니다.

제스처 인식기가 서브 뷰 (사례의 두 개의 버튼)에 도달하기 전에 제스처 인식기가 닿아 발생합니다. UIGestureRecognizerDelegate 프로토콜, 즉 gestureRecognizer:shouldReceiveTouch: 메서드를 구현하고 터치가 두 개의 버튼 중 하나에 있으면 NO를 반환해야합니다. 이렇게하면 주황색보기가 단추를 의도 한 채로 넘어지는 것을 막을 수 있으며 단추가 예상대로 작동하기 시작합니다.

+0

나는이 생각하지만 터치에 응답하는보기 애니메이션 (단추에 파란색 플래시) 단추 응답을 보여도 기본보기입니다. – Kyle

3

당신은 오렌지보기에서 탭 제스처에 응답하는 방법을 수정할 수 있습니다

-(void) handleTapFrom:(UITapGestureRecognizer*) recognizer { 
    CGPoint location = [recognizer locationInView:orangeView]; 
    UIView *hitView = [orangeView hitTest:location withEvent:nil]; 

    if ([hitView isKindOfClass:[UIButton class]]) { 
     return; 
    } 

    //code that handle orange view tap 
    ... 
} 

당신이있는 UIButton을 만지면 이런 식으로, 탭이 기본보기에 의해 무시됩니다.

1

정답은 found here입니다. 나는이 대답에 대한 리드를 this post 통해 얻었습니다.

tapRecognizer.cancelsTouchesInView = NO; 

나는에 대한 UIButtons으로 트레이딩을하고 결국 한 무엇

관련 문제