Сценарий на 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 и выше.
Я знаю, что мог бы просто создать еще одну левую кнопку вместо кнопки «Назад», но я нашел более удобным использование делегата, плюс я получаю «настоящую» кнопку «Назад», чего я и хочу.