UINavigationController popToRootViewControllerAnimated возвращается один за другим

Это простой код, к которому я звоню, чтобы вернуться rootViewController из UINavigationController:

-(void)viewWillDisappear:(BOOL)animated
{
     [self.navigationController popToRootViewControllerAnimated:YES];   
     [super viewWillDisappear:animated];
}  

Но задняя навигация происходит одна за другой.
Скажем, у меня есть 3 viewControllers - A, B, C.
A -> B -> C
То, что я хочу на задней части C, это:
C -> A
Но при использовании popToRootViewControllerAnimated вот как выглядит обратная навигация:
C -> B -> A

2 ответа

Попробуй понять, что должно произойти

-(void)viewWillDisappear:(BOOL)animated
  {
    [self.navigationController popToRootViewControllerAnimated:YES];
    [super viewWillDisappear:animated];

  }

Сначала вы вызываете метод viewWillDisappear. который будет выполняться первым. после выполнения этого вашего текущего представления " B ". Затем выполняет " [self.navigationController popToRootViewControllerAnimated: YES] ", поэтому. Вы увидите A <-B (вид А с б)

Итак, вы увидите во всех A <-B <-C.

Чтобы решить эту проблему, попробуйте выполнить метод popToRootViewControllerAnimated вне метода viewWillDisappear

Попробуй использовать

[self.navigationController popToViewController:VC animated:YES] 

вместо

[self.navigationController popToRootViewControllerAnimated:YES]

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

Другой способ сделать это то, что popToRootViewControllerAnimated я думаю, что вам определенно следует избегать, так как это общий метод, широко используемый в приложениях. Вы можете изменить его реальное поведение с помощью своего извращенного поведения.

Смотрите http://nshipster.com/method-swizzling/ для ознакомления.

Другие вопросы по тегам