Двойное нажатие UINavigationController navigationBar?

У меня есть приложение с длинным списком данных в tableView, и я хотел бы дважды коснуться панели навигации, чтобы прокрутить UITableView вверху списка (где находится поиск).

Как я могу это реализовать?

Спасибо за вашу помощь.


person Bill    schedule 12.07.2010    source источник
comment
вы также можете просто коснуться строки состояния, и она автоматически переместится в верхнюю часть вашего tableView. Код не нужен.   -  person Souljacker    schedule 19.04.2012


Ответы (2)


Стандартным жестом для прокрутки tableView вверх является одно касание строки состояния. Он включен по умолчанию, см. Справочник по UIScrollView

Если вам действительно нужна панель навигации и вы ориентируетесь на версию 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 или ниже, это может стать немного сложнее, поэтому не рекомендуется.

person tonklon    schedule 12.07.2010
comment
Стандартное поведение — одиночное нажатие. Не двойной тап. - person Alan Rogers; 12.07.2010
comment
Я пытался добавить распознаватель касаний для однократного касания. Этот подход возможен только в том случае, если у вас нет кнопки «Назад» или rightBarButtonItem. Их события щелчка переопределяются распознавателем жестов. - person Drarok; 24.06.2011
comment
Не хочу показаться грубым, но Драрок прав, используя этот метод, я больше не могу использовать кнопки «Назад». Есть ли способ заставить их снова работать? Помоги пожалуйста :) - person Octoshape; 14.10.2011
comment
Да, ты прав. Это не работает с кнопками в navBar. Мне жаль, что я не вижу решения этой проблемы. Может быть, кто-то еще? - person tonklon; 14.10.2011
comment
Хм, я просто создам новый вопрос и дам ссылку на этот, не думайте, что люди все еще читают этот вопрос здесь. - person Octoshape; 14.10.2011
comment
Посмотрите мое решение (для одного нажатия), которое работает с кнопками в панели навигации: stackoverflow.com/a/21288149/235297 - person Ortwin Gentz; 22.01.2014

Следуя ответу от tonklon, вы можете различать отдельные элементы в представлении navigationBar, получая его подпредставления.

Подвиды панели навигации:

0 левая кнопка, 1 заголовок, 2 правая кнопка,

поэтому вместо:

[navController.navigationBar addGestureRecognizer:tapRecon];

сделайте это для заголовка панели навигации:

[[self.navigationController.navigationBar.subviews objectAtIndex:1] setUserInteractionEnabled:YES];
[[self.navigationController.navigationBar.subviews objectAtIndex:1] addGestureRecognizer:tapRecon];
person phmagic    schedule 08.05.2012
comment
Две проблемы: 1) titleView меньше по высоте, чем панель навигации. 2) индекс подпредставления может измениться, если есть несколько левых кнопок (не тестировалось). Вот альтернативное решение: stackoverflow.com/a/21288149/235297 - person Ortwin Gentz; 22.01.2014