2010-01-06 8 views
6

У меня возникла невероятно неприятная проблема, которая кажется ошибкой, но мне очень трудно полагать, что никто другой не столкнулся с этим. Контроллер корневого представления моего приложения - это UITabBarController, где каждая вкладка является UINavigationController. Все отлично работает.UINavigationController setViewController: анимированные: проблемы с навигационной панелью

Теперь я пришел к месту, где я хочу, чтобы изменить стек, поэтому я переставить viewControllers текущего контроллера навигации, а затем сделать:

[self.navigationController setViewControllers:newViewControllers animated:YES]; 

Стек правильно совал/втягивания к контроллер верхнего уровня, но панель навигации не обновляется до текущего контроллера представления и, похоже, остается такой же, как и с viewController перед попом. Если да, то:

[self.navigationController popToViewController:someViewController animated:YES]; 

Все работает отлично. Кто-нибудь когда-либо сталкивался с этим раньше? Есть ли обходной путь? Что-то я делаю неправильно?

+1

Эта ошибка - http://openradar.appspot.com/7470644, похоже, связана? – Anurag

+0

Да! Это точно такая же ошибка, но это решение довольно уродливое. Вы нашли лучшее обходное решение? – beinstein

+0

Я тоже получаю эту ошибку. Очень расстраивает. –

ответ

2

Apple, по-видимому, это исправил в новейшей SDK

+1

Нет, не исправлено в Xcode 7.2.1 как минимум. – turingtested

+0

с Xcode 9.0 также я сталкиваюсь с той же проблемой. это ошибка? – damithH

1

Две одинаково безобразные работы вокруг.

Во-первых, Если:

[self.navigationController popToViewController:someViewController animated:YES]; 

хорошо работает, попробуйте толкания дополнительный ViewController в стеке, а затем вызвать:

[self.navigationController popToViewController:someViewController animated:NO]; 

Значение вы должны добраться до ВХ вы хотите без анимации ,

Во-вторых,

Перед установкой стека, установите leftButtonBarItem = ноль; Эффективное удаление кнопки контроллера старого вида. На самом деле, если название неправильное, измените это тоже.

Ни один из них не является чистым, но может дать желаемые результаты.

0

Вы также можете установить корневой контроллер представления, как делегат UINavigationController как:

@interface YourViewController : UIViewController <UINavigationControllerDelegate> { 

, а затем в методе делегата didShowViewController вручную устанавливать доступные контроллеры Вид:

-(void)navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated { 
    [[viewController navigationController] setViewControllers:[[viewController navigationController] viewControllers]]; 
} 

Позвольте мне знать, если это работает в вашей среде!

-2
[self.navigationController setViewControllers:newViewControllers animated:NO]; 

это может помочь вам.

4

Я столкнулся с такой же проблемой, кажется, что Apple не исправила эту ошибку, и в результате выбранный ответ этого потока оказался неправильным. Мне удалось исправить эту проблему, используя this bug report, как в комментарии Анурага в сочетании с комментарием Скотта Пфеила.

Вот код:

navController.navigationBarHidden = YES; 

NSArray* viewControllers = navController.viewControllers; 
UIViewController* currentController = [viewControllers objectAtIndex:viewControllers.count-1]; 

NSArray *controllers = [NSArray arrayWithObjects: viewController , currentController , nil]; 

[navController setViewControllers:controllers animated:NO]; 

navController.navigationBarHidden = NO; 

Я называю этот код в viewDidLoad в currentController и то, что я сделал, это заменить предыдущие контроллеры только viewController.

Надеюсь, это поможет.

+2

Настройка навигационной панели для скрытия, а затем ее отображение исправлено для меня. –

Смежные вопросы