2012-06-22 2 views
9

단추 이외의 다른 것이 있으면 사라지게하려는 단추가 있습니다. 액션 : 삭제 버튼 : I 이렇게하면버튼 제스처 인식기로 버튼 이벤트를 덮어 쓰시겠습니까?

[self.superview addGestureRecognizer:self.tapOutsideDelete]; 

가 deleteButton위한 조치이다 포함하는보기에 탭 제스처 인식기를 추가하여 나중에 하였다

[self.deleteButton addTarget:self action:@selector(deleteButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 

그래서 목표 설정 단추 탭이 인식되지 않는 것처럼 실행되지 않습니다. 이 경우 제스처 인식기가 작동합니다. 하지만 탭 제스처 인식기가 버튼 탭보다 우선 순위가 있다고 생각하게하는 deleteButton을 탭할 때도 작동합니다.

제스처 인식기를 제거하면 deleteButton이 올바르게 작동합니다.

분명히이 두 이벤트를 함께 처리하는 방법을 이해할 수 없습니다. 내가 무엇을해야 하나?

(deleteButton은 테이블 뷰 셀의 삭제 단추를 모방하지만이 경우에는 헤더보기에 있습니다.) 테이블의 아무 곳이나 탭하면 삭제 단추가 사라지는 메서드를 호출해야합니다. 버튼 자체는 셀에서와 같은 방식으로 작동합니다.)

+0

당신은 자기 대신 self.superview 할 수있는 제스처 인식기를 추가 불확실성의 비트를 얻을 수 있습니다 당신은 gestureRecognizer:shouldReceiveTouch: 방법을 구현해야합니다. 헤더 뷰가 아니라 헤더 뷰가 포함 된 tableview에 추가됩니다. 헤더 뷰는 의도 한 것일 수도 아닐 수도 있습니다. – MusiGenesis

+0

가능한 [제스처 인식기 및 버튼 동작] (http://stackoverflow.com/questions/4825199/gesture-recognizer-and-button-actions) –

답변

12

예, 탭 제스처는 탭에서 첫 번째 균열을 갖습니다. (이보기 컨트롤러 인 경우 또는 self.view)

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

    if (touch.view == self.deleteButton) { 
     return NO; 
    } 
    return YES; 
} 
+2

감사. 이것은 완벽하게 작동했습니다. 이것은 UIGestureRecognizerDelegate 프로토콜의 델리게이트 메소드라는 사실을 발견하기 위해 약간 파고 들었으므로 델리게이트 포인터도 설정해야합니다. – Jim

+0

@ 짐 : 미안, 나는 그것을 추가하려고했다. 웹상의 많은 iOS 튜토리얼 등이 솔루션에 필요한 모든 정보를 어떻게 포함하고 있는지, 그리고 방금 추가했는지는 실망 스럽습니다. – MusiGenesis

관련 문제