2011-05-10 5 views
1

내보기에는 UIBarButtonItem 두 개의 단추가있는 도구 모음이 있습니다. 제스처 인식기를 구현하여 툴바를 제외하고 뷰의 아무 곳이나 탭하면 선택기가 호출됩니다. 툴바의 막대 버튼 항목을 탭하면 해당 버튼의 액션 메소드를 호출해야합니다. 보기는 UIGestureRecognizerDelegate 프로토콜을 준수하고 다음과 같이 shouldReceiveTouch 방법을 구현iOS에서 툴바에서 제스쳐 인식을 허용하지 않으려면 어떻게해야하나요?

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
               shouldReceiveTouch:(UITouch *) touch { 
    // Disallow recognition of tap gestures in the toolbar 
    if ((touch.view == self.sideOneBarButton.customView) && 
     (gestureRecognizer == self.tapRecognizer)) { 
    return NO; 
    } 
    return YES; 
} 

문제는, 내가 도구 모음 버튼을 누를 때 내 문이 실패 할 경우, 그래서 touch.view는 문서화되지 않은 클래스는 타입 UTToolbarTextButton*이다 shouldReceiveTouch은 항상 YES를 반환하고 내 버튼 이벤트는 결코 호출되지 않습니다.

이상적으로, 나는 말하고 싶습니다 : 터치가 툴바의 어느 곳이라면, no를 반환하십시오. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

+0

난 그냥 http://stackoverflow.com/questions/3344341/uibutton-inside-a-view-that-has-a-uitapgesturerecognizer 내가 찾던 답이있는을 발견했다. 감사! – LandedGently

+0

귀하의 질문에 대한 자체 서면 답변 내에서 해당 링크를 추가하고 답변없이 질문을하지 않으려면 가능한 빨리 동의하십시오. – Till

답변

0

귀하의 중심이 아닌 모든 것에 대한 제스처를 무시할 수있는 방법이 있습니다. 예를 들어

내가 가진 : 지금

@interface myClass : UIViewController<..,UIGestureRecognizerDelegate,..> 

및 위임 기능 :이 나를 위해 많은 일

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if (touch.view == self.view) 
    { 
     return YES; 
    } 
    return NO; 
} 

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] 
           initWithTarget:self 
           action:@selector(dismissKeyboard)]; 

tap.delegate = self; 

[self.view addGestureRecognizer:tap]; 

는 클래스에 제스처 대리자를 추가 제스처 때문에 UIToolbar를 사용할 수 없을 때

@LandedGently가 언급 한 것처럼3210

또한, 여기에 자세한 내용이 있습니다 :

UIButton inside a view that has a UITapGestureRecognizer

그래서 사람들은 코멘트에 링크를 놓치지 마세요.

1

위임 기능에 대해서는 나에게 좋습니다.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if ([touch.view.superview isKindOfClass:[UIToolbar class]]) { 
     return NO; 
    } 
    return YES; 
} 
관련 문제