1

UITapGestureRecognizer에 약간의 문제가 있습니다.왜이 UITapGestureRecognizer는 탭을 인식하지 못합니까?

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    return YES; 
} 

나는 비슷한 문제 및 수 '를 가진 사람들의 수많은 스레드를 통해 검토 한 : 나는 이런 식으로 만들 : 나는 또한 포함 헤더 파일에서

self.userInteractionEnabled = YES; 

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
tapRecognizer.cancelsTouchesInView = NO; 
tapRecognizer.delaysTouchesBegan = YES; 
tapRecognizer.delegate = self; 
tapRecognizer.numberOfTapsRequired = 1; 
tapRecognizer.numberOfTouchesRequired = 1; 
[self addGestureRecognizer:tapRecognizer]; 

을 그래서 같은 shouldReceiveTouch: 메소드를 구현 해결책을 찾는 것처럼 보입니다. 나는보기는 제스처 인식기를 추가하는 경우 것이 가능 탭 인식을 방해 할 수있는 YES로 userInteractionEnabled 세트 파단을 가지고 있다고 들었습니다, 그래서도 포함이 :

for(UIView *subview in self.subviews) { 
    subview.userInteractionEnabled = NO; 
} 

사람은 왜 제스처를 알고 인식기가 작동하지 않습니까?


편집 :

는 여기에 몇 가지 세부 사항은 다음과 같습니다

  • 나는 UIView 하위에 UITapGestureRecognizer을 추가 해요.
  • 'initWithFrame: 하위 클래스의 제스처 인식기를 추가합니다.
  • 제스처 인식기가 실제로 추가 된 코드 부분을 밟아 추가되는 것을 확인했습니다.
  • 이보기가 포함 된보기 컨트롤러에는 연결된 제스처 인식기가 없지만 touchesBegan, touchesMovedtouchesEnded을 구현합니다. 그러나이 question에 따르면 뷰 컨트롤러는 뷰의 제스처 인식에 영향을 미치지 않아야한다고 구현합니다.


편집 2 :

나는 수신 접촉에서 제스처 인식기와보기를 차단하는 다른 뷰가 없음을 확인한

. 또한 뷰가 실제로 포함 된 뷰 컨트롤러의 뷰에 추가되는지 확인했습니다. 그것은 문제가 다른 곳에있는 것처럼 보입니다.

+0

이보기의 상위 개체 중 하나에 제스처 인식기가 연결되어 있습니까? –

+0

@BrianShamblen - 뷰가있는보기 컨트롤러에는 제스처 인식기가 연결되어 있지 않지만'touchesBegan :','touchesMoved :'및'touchesEnded :'가 구현됩니다. – pasawaya

+0

보기의 배경색을 빨간색으로 설정할 수 있습니까?빨간색보기를 잘 볼 수 있다면 계층 구조 안의 모든보기의 배경색을 설정 한 다음보기가 겹쳐 졌는지 알 수 있습니다. – vodkhang

답변

2

설정이 제대로 작동해야하므로 두 가지 중 하나가 발생하고 있습니다. 실제로이 뷰를 ViewController의 뷰에 추가하는 것을 잊었거나 터치를 훔쳐 가고있는이 뷰의 맨 위에 다른 뷰가있을 수 있습니까?

+0

+1 터치를 훔쳐서 +1했습니다. 여러 번 실행했습니다. 당신은 현재의 것 위의 시각은 방해가되지 않을 것이라고 생각하지만 그것은 그렇습니다. 계층 구조에서이 뷰 위에있을 수있는 모든 것을 조심스럽게 검사하십시오. – Chris

+0

흠. 실제로보기 컨트롤러 뷰에보기를 추가하고 있음을 확인했습니다. 나는 그것 위에 놓이는 것이 있는지보기 위해 노력할 것이다. – pasawaya

+0

아무 것도없는 것처럼 보이지 않습니다. 모든 뷰 컨트롤러의 뷰의 하위 뷰를 반복하고 교차하는 모든 하위 뷰를 기록했습니다 (하나만있는 것으로 밝혀졌습니다). 그런 다음 위의 뷰를'insertView : aboveSubview :'를 호출하여 위의 뷰로 옮기고 뷰에서'bringSubviewToFront :'를 호출하여 뷰를 두 번 확인했습니다. 이 모든 후 탭 제스처 인식기는 여전히 작동하지 않는 것 같습니다. – pasawaya

0

다른 문제는 UITapGestureRecognizer가 추가 된보기가 너무 커서 화면을 탭할 때 터치 포인트가보기의 경계에 있지 않다는 것입니다.

0

또한 UIView가 투명하지 않은지 확인하십시오. 배경색을 예 : 검은. 이것은 나를 위해 문제를 해결했다.

관련 문제