2010-07-12 4 views
3

나는 tableView에 긴 데이터 목록을 가진 앱을 가지고 있으며 목록 상단 (검색이있는 곳)에 UITableView를 스크롤하기 위해 navigationBar를 두 번 탭하고 싶습니다.UINavigationController navigationBar를 두 번 탭 하시겠습니까?

어떻게 구현할 수 있습니까?

도움 주셔서 감사합니다.

+0

tatus 표시 줄과 자동으로 tableView의 맨 위로 이동합니다. 코드가 필요하지 않습니다. – Souljacker

답변

16

테이블을 스크롤하는 표준 제스처는 맨 위에있는 상태 표시 줄의 한 번 탭입니다. 기본적으로 사용 설정됩니다. UIScrollView Reference

네비게이션 바를 정말로 원하는 경우 3.2 이상을 타겟팅하는 경우 UITapGestureRecognizer를 네비게이션 바에 연결하는 것이 좋습니다.

- (void)viewDidLoad { 
    UITapGestureRecognizer* tapRecon = [[UITapGestureRecognizer alloc] 
       initWithTarget:self action:@selector(navigationBarDoubleTap:)]; 
    tapRecon.numberOfTapsRequired = 2; 
    [navController.navigationBar addGestureRecognizer:tapRecon]; 
    [tapRecon release]; 
} 

- (void)navigationBarDoubleTap:(UIGestureRecognizer*)recognizer { 
    [tableView setContentOffset:CGPointMake(0,0) animated:YES]; 
} 

3.0 이하를 타겟팅하는 경우 조금 힘들 수 있으므로 권장하지 않습니다.

+1

표준 동작은 * 단일 * 탭입니다. 더블 탭이 아닙니다. –

+0

아, 네 말이 맞아. – tonklon

+2

싱글 탭에 탭 인식기를 추가하려고했습니다.이 방법은 뒤로 버튼 또는 rightBarButtonItem이없는 경우에만 실행 가능합니다. 클릭 이벤트는 제스처 인식기에 의해 무시됩니다. – Drarok

9

tonklon의 답변에 이어 하위보기를 가져 와서 네비게이션보기의 개별 항목을 구별 할 수 있습니다. 내비게이션 바의

파단은 :

0 leftbutton, 1 타이틀 2 rightbutton,

그래서 대신 :

[navController.navigationBar addGestureRecognizer:tapRecon]; 

탐색 바의 제목 이렇게 :

[[self.navigationController.navigationBar.subviews objectAtIndex:1] setUserInteractionEnabled:YES]; 
[[self.navigationController.navigationBar.subviews objectAtIndex:1] addGestureRecognizer:tapRecon]; 
+1

이것은 작동합니다! 왜 이것이 답변으로 표시되지 않았는지 모르겠다. – Bot

+0

두 가지 문제점 : 1) titleView의 높이가 탐색 바의 높이보다 작습니다. 2) 여러 개의 왼쪽 단추 (테스트되지 않음)가있는 경우 하위보기 색인이 변경 될 수 있습니다. 대체 솔루션은 다음과 같습니다. http://stackoverflow.com/a/21288149/235297 –

관련 문제