2017-02-18 13 views
0

보기에 UITapGestureRecognizer를 설정했습니다. 뷰 내의 특정 영역 만 뷰의 비헤이비어를 트리거해야합니다. 나는 터치의 정확한 위치가 뷰의 실제 실행 가능한 영역에 있는지 여부를 확인하여이를 수행합니다. 이 영역에 터치가없는 경우 탭을 뷰 계층에서 위쪽으로 전파하고 싶습니다.UITapGestureRecognizer가보기와 관련이없는 탭을 사용하지 않도록 설정합니다.

나는 제스처 델리게이트를 사용하려고했습니다 : shouldReceive 터치를하고 터치가 뷰와 관련이 있는지 테스트합니다.하지만 터치가 아닌 터치로 작동하므로 수행 할 수 없습니다. shouldReceive에서 관련성 테스트를 수행 할 수 있으며 탭 액션 핸들러가 호출 된 경우에만 작업을 수행 할 수 있지만 어색함을 느낍니다. 제스처 인식기가 꼭지를 소비하지 않기로 결정했다고 iOS에 알리는보다 우아한 방법이 있습니까?

+0

몇 가지 관련 코드를 공유 할 수 있습니까? 탭 제스추어가 트리거되어야하는 _ 특정 영역, 다른 유형과 비교하여보기 유형이 다른가요? – ystack

+0

실제로 내가 작업하는 뷰는 attributedString을 가진 UITextView입니다. 여기서는 일부만 사용자 정의 탭 동작으로 표시되어 있습니다. 그래서 제 행동에서 나는 꼭지가 그 부분들 중 어느 부분에 닿았는지, 그리고 그렇지 않다면 아무것도하지 말아야하는지 먼저 시험합니다. – jazzgil

+0

와아! 'gestureRecognizer : shouldReceiveRouch'를 사용하여 여러개의 뷰가 있다면 올바른 방법이었을 것입니다. 하지만 귀중한 문자열의 경우, 사소한 사용 사례의 경우 텍스트 키트를 사용해야합니다. 모든 코드를 살펴 보지 않고이 특정 답변을 검토하여 도움을받을 수 있습니다. http://stackoverflow.com/a/28519273/3339346 – ystack

답변

0

우리의 논의를 바탕으로, 당신은 터치 핸들러에게 & gestureRecognizer:shouldReceiveTouch:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ 

    if ([touch.view isDescendantOfView:interestingView]) { 
     return NO; 
    } 
    return YES;  
} 

희망이 도움을 AttributedString의에서 if-else 검사의 조합을 사용하여을 평가할 수 있습니다.
그렇지 않다면, 다시 말하지만, 관련 코드를 공유하는 것이 좋습니다.

+0

설명했듯이 - 이것이 이미 제 자리에 있지만 테스트 부분을 분할하는 것이 번거롭고 어색한 것으로 나타납니다. 액션 트리거. 탭 자체의 제스처 액션 핸들러 내에서 솔루션을 찾고 있습니다. – jazzgil

+0

그래, 나도 알아.이게 못생긴거야. 어쩌면 당신은 계층 구조에서 당신의 의견을 깨뜨리는 것을 고려할 수 있습니다. 제스처를 다르게 처리해야하는 뷰 사이에 _parent-child_ 뷰 계층 구조를 만들지 마십시오. 또는 제스처 처리 _router_를 사용하여 제스처의 위치를 ​​결정하고 독립적 인 제스처 핸들러를 호출하여 모든 데이터에 대해 볼 수있는 의존성을 없앱니다. – ystack