2009-10-22 3 views
1

사용자 제스처를 처리하는 사용자 정의 테이블 뷰 셀이 있습니다. 그러나, 예를 들어 exclusiveTouch를 YES로 설정해도 y 값이 변경되는 순간 터치 이벤트를 처리하는 중일지라도 scolling이 시작됩니다. 셀에서 터치 이벤트를 처리 할 때 테이블이 스크롤되지 않도록하려면 어떻게합니까?부모 테이블 뷰로 처리되지 않도록하기

답변

2

그래서 : 나는 사용자 정의 셀 그것을 어떻게이다 나는 좌우가 세포 내에서 슬라이딩 할 수있는 내장 불행히도 조건부로 처리하는 방법은 superView에 달려있다. 일부보기 및 이벤트 (예 : UITableView 선택)의 경우 touchesBegan : 이벤트를 nextResponder로 전달하고, 제스처를 추적하고, touchesMoved : 이벤트를 nextResponder에 전달하고, 사용자가 제스처를 감지하고 트리거 될 때 touchesCancelled를 전송해야합니다. nextResponder에 전달하고, touchesEnded 또는 touchesCancelled : 자신을받을 때까지 다음 응답자 (touchesEnded : and touchesCancelled :)에서 다른 모든 이벤트를 숨 깁니다.

그러나 UIScrollView에서는 scroll 이벤트를 처리 할 nextResponder가 필요하지 않은 특별한 경우가 있습니다 (스크롤은 hitTest와 같은 메서드에서 가장 많이 감지됩니다). 따라서 포워딩이나 이벤트와 관련하여 여러분이하는 일과 상관없이 스크롤은 여전히 ​​발생합니다. 스크롤을 방지하는 유일한 방법은 제스처가 감지 되 자마자 상위보기에서 스크롤을 사용 중지 한 다음 스크롤이 끝나거나 취소 될 때 스크롤을 다시 사용 가능하게 설정하는 것입니다.

1

난 당신이 jQuery과 서브 클래스 화해 그러나 hitTest를 구현할 필요가 있다고 생각 : withEvent : 올바른

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    NSIndexPath *indexPath = [self indexPathForRowAtPoint:point]; 
    UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath]; 

    if ([cell isKindOfClass:[MyCustomCell class]]) 
    { 
     return cell; 
    } 

    return [super hitTest:point withEvent:event]; 
} 
+0

셀에서 발생하는 모든 이벤트가 버블 링되는 것을 방지하지 않습니까? –

+0

그래, 당신이 더 고급 처리에 대한 이벤트의 터치를 분석 할 수 있어야하지만, 내 경우에는 문제가되지 않았습니다. –

관련 문제