2012-02-19 3 views
0

UITableView 및 UINavigationController가 있는데 두 번의 클릭 사이를 구분하고 싶습니다. 1) 정상적인 클릭으로 행을 선택하고 2) 화면의 아무 곳에서나 클릭하는 것입니다. UINavigationController). 나는이 코드를 작성했다 :UITableView 단일 클릭

singleTap = [[UITapGestureRecognizer alloc] 
            initWithTarget:self action:@selector(singleTapHandler:)]; 
singleTap.numberOfTapsRequired = 1; 

그러나이 문제는 행을 선택하는 일반 클릭을 무시한다는 점에서 문제가된다.

+0

"화면의 다른 곳"이 의미하는 것은 명확하지 않습니다. 테이블보기가 탐색 모음 아래의 전체 화면을 차지합니까? 테이블보기 행을 터치하여 행을 선택하고 탭 인식기를 트리거하려는 것을 의미합니까? –

+0

테이블보기는 탐색 모음 아래의 전체 화면을 사용합니다. 행을 선택하기 위해서만 테이블 뷰 행에 대한 터치가 필요합니다. 다른 곳의 터치는 꼭지 인식기를 트리거해야합니다. 그리고 네비게이션 바에있는 버튼을 누르면 푸시 핸들러 만 트리거됩니다. 그게 더 명확 해? – user1120008

+0

버튼 밖에있는 탐색 표시 줄에 탭을 인식하려는 화면의 유일한 부분처럼 들립니다. 옳은? –

답변

1

나는 당신이 UIWindow 또는 윈도우의 유일한 하위보기에 탭 인식기를 설치한다고 가정합니다. 탭 인식기에 대리자를 제공해야하며 해당 대리자는 gestureRecognizer:shouldReceiveTouch:을 구현해야합니다.

이 방법에서는 터치가 버튼에 있거나 터치가 테이블보기 셀에있는 경우 NO을 반환하고 그렇지 않으면 YES을 반환하려고합니다. 터치가 착륙 한 뷰부터 시작하여 뷰 계층 구조를 따라 가면서 해당 클래스 중 하나를 찾아야합니다.

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