popViewController / viewWillAppear не поддерживается в iOS 5 - PullRequest
5 голосов
/ 17 января 2012

Мне не повезло с поиском этого, так что поехали;)

У меня есть UIViewController с пользовательским UINavigationBar, который выдвигает еще один UIViewController в качестве подпредставления.

Все работает нормально, кроме тех случаев, когда я нажимаю кнопку назад в подпредставлении .Предварительный просмотр (первый) отображается правильно, но не анимирован.Анимация UINavigationBar правильная, немедленно переключаются только виды.

Функция - (void)viewWillAppear:(BOOL)animated первого UIViewController вызывается с NO для animated.Это происходит только при тестировании с iOS 5, а не с iOS 4.

Кто-нибудь знает, как это исправить?

Спасибо за вашу помощь!Ханнес

ОБНОВЛЕНИЕ 1

Я просто удалил весь пользовательский код и просто использовал обычный UINavigationBar (так что никаких дополнительных настроек), и он все еще не работает с iOS5. Это мой код, который я использую в первом ViewController для нажатия второго ViewController:

[self.navigationController pushViewController:secondViewController animated:YES];

Как я уже упоминал - когда я нажимаю кнопку "Назад" на панели навигации навторой вид первый вид появляется сразу без анимации.

Любая помощь будет оценена!Спасибо!

ОБНОВЛЕНИЕ 2

Мне кажется, что я все ближе к проблеме, но все еще нет решения:

Я только что добавил кастомUINavigationController, где я просто звоню [super popViewControllerAnimated:animated].Этот метод вызывается правильно (анимировано - ДА), но viewWillAppear первого UIViewController получает НЕТ как значение для анимированного ...

Ответы [ 3 ]

6 голосов
/ 21 января 2012

У меня была похожая проблема сегодня, когда UIViewController получал НЕТ в viewWillAppear, за исключением стандартных UINavigationBar и UINavigationController.

Оказалось, из-за ручного вызова viewWillAppear:YES куда-то, чего не должно было быть. Этот элемент предполагает, что он также может быть вызван вызовом неправильного метода super где-то (например, [super viewWillAppear:animated] вместо [super viewDidAppear:animated] внутри viewDidAppear).

Что касается использованияпользовательский UINavigationBar, я натолкнулся на эту ссылку сегодня, которая может помочь вашему делу: http://sloshire1.posterous.com/simple-fix-for-viewwillappear-in-ios5

0 голосов
/ 20 января 2012

Вы пытались удалить весь свой пользовательский код и перейти с родной панели навигации? Поведение остается прежним? Таким образом, вы можете проверить, не перепуталась ли ваша пользовательская панель с переходом.

0 голосов
/ 18 января 2012

Apple реализовала официальные способы создания пользовательских панелей навигации в iOS 5. К сожалению, они также нарушили большинство неофициальных способов сделать это в iOS 4. iOS 5 больше не будет вызывать drawRect для вас.У вас должно быть два способа сделать это: один для iOS 5 и выше, используя новые вызовы, и один для iOS 4 и более ранних, используя старые вызовы.Посмотрите документацию для пользовательских панелей навигации в iOS 5 для получения дополнительной информации.

...