Я столкнулся с странной проблемой. При установке navigationController.viewControllers
в новый массив, который viewControllers
равен текущему UIViewController.viewControllers
, затем пытается переходить к новому viewController
(push segue), UIViewController.viewControllers
испорчен.Настройка navigationController.viewControllers испортил стек позже
Чтобы быть точным, я сделал следующие:
-(void)viewWillAppear:(BOOL)animated
{
...
for(int i=0; i<[self.navigationController.viewControllers count]; i++)
{
NSLog(@"Befor: %d: %@",i, [[self.navigationController.viewControllers objectAtIndex:i] description]);
}
[[self navigationController] setViewControllers:[NSArray arrayWithObjects:[self.navigationController.viewControllers objectAtIndex:0], self,nil] animated:NO];
NSLog(@"After: Num of view controllers: %d", [self.navigationController.viewControllers count]);
for(int i=0; i<[self.navigationController.viewControllers count]; i++)
{
NSLog(@"After: %d: %@",i, [[self.navigationController.viewControllers objectAtIndex:i] description]);
}
}
Результаты Войти:
Befor: Num контроллеров отображения: 2 2014-02-15 17: 15: 01,144 [827 : 60b] Befor: 0: 2014-02-15 17: 15: 01.145 [827: 60b] Befor: 1: 2014-02-15 17: 15: 01.147 [827: 60b] После: Количество контроллеров просмотра: 2 2014 -02-15 17: 15: 01.148 [827: 60b] После: 0: 2014-02-15 17: 15: 01.149 [827: 60b] После: 1:
Затем я нажал кнопку, которая переходит к другому viewController. Просто перед Segue этот код называется:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"prepareForSegue: Num of view controllers: %d", [self.navigationController.viewControllers count]);
for(int i=0; i<[self.navigationController.viewControllers count]; i++)
{
NSLog(@"prepareForSegue: %d: %@",i, [[self.navigationController.viewControllers objectAtIndex:i] description]);
}
...
}
Результаты Лог:
2014-02-15 17: 15: 05,388 [827: 60b] prepareForSegue: Кол-во контроллеров зрения: 1 2014 -02-15 17: 15: 05,389 [827: 60b] prepareForSegue: 0:
я контролировал navigationController.viewControllers
в месте назначения viewController
, и кажется, что rootViewController
исчез. При попытке вернуться (с помощью кнопки возврата контроллера навигации) все стало некрасиво.
Я заметил, что все это не происходит, когда я назначаю массив, объекты которого отличаются от текущего navigationController.viewControllers
, поэтому это обходное решение пока.
Я сделал что-то не так?
Я перепроверял, и все переходы на моей раскадровке - это стиль push. Адреса навигационных контроллеров одинаковы. – Yony