Получение делегата UINavigationBar для разрешения «назад» с красивой анимацией.

Сценарий на iPhone:

Пользователь нажимает кнопку «Назад», метод делегата UINavigationBar(реализованный в подклассе UINavigationController) возвращает YES, например:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
    // Verify stuff...

    return YES;
}

Теперь, согласно docs, приложение отвечает за синхронизацию панели навигации и содержимого, а также место для этого находится в методе делегата

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item

Проблема в том, что didPopItemвызывается только после завершения последовательности всплывающей анимации панели навигации, поэтому, если я вызову [self popViewControllerAnimated: NO], конечным результатом является то, что сначала навигационная панель сдвигается назад, а затем содержимое.

И это просто выглядит неправильно.

Если я вызову навигацию контроллера pop... в методе делегата shouldPop... я получаю сообщение об ошибке о том, что я перекрываю анимации, и конечное состояние не является чистым.

Итак, мой вопрос: есть ли другой способ заставить UINavigationController изменять содержимое, желательно с красивой анимацией, синхронизированной с навигационной панелью, но не создавая путаницы между навигационной панелью и навигационным контроллером?

Целевая ОС — iOS 4.2 и выше.

Я знаю, что мог бы просто создать еще одну левую кнопку вместо кнопки «Назад», но я нашел более удобным использование делегата, плюс я получаю «настоящую» кнопку «Назад», чего я и хочу.

9
задан Monolo 12 June 2012 в 19:40
поделиться