2014-02-15 2 views
0

Я столкнулся с странной проблемой. При установке 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, поэтому это обходное решение пока.

Я сделал что-то не так?

ответ

1

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

Сравните адреса двух контроллеров навигации, которые показывают неожиданные числа контроллеров просмотра: возможно, они разные, и в этом случае вы должны проверить, где вы добавляете новые навигационные контроллеры.

+0

Я перепроверял, и все переходы на моей раскадровке - это стиль push. Адреса навигационных контроллеров одинаковы. – Yony

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