有3个视图控制器,A,B,C,都是在故事板中设计的。
在所有pushViewController:
控制器都来自[self.navigationController instantiateViewControllerWithIdentifier:@"A/B/C_Controller"]
;
在A_ViewController(根控制器(:
-(void)viewWillAppear
{
[self.navigationController pushViewController:B_Controller animated:YES];
}
B_ViewController:
-(IBAction)someButtonClick
{
[self.navigationController pushViewController:C_Controller animated:YES];
}
C_ViewController:
-(IBAction)someButtonClick
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
问题:A_viewController -> B_viewController -> C_viewController很好。
但是在 popToRootViewController 从 C 到 A 之后,A 不能再推送到 B 了。等pushViewController:
都不起作用,popViewControllerAnimated:
也会导致崩溃。
注意。
试过
// in A view
dispatch_async(dispatch_get_main_queue(),^{
[self.navigationController pushViewController:B_viewController animated:YES];
})
在这篇文章中,但它对我不起作用。
有谁知道视图控制器堆栈中会发生什么?
整天都在这个问题上挣扎,任何帮助将不胜感激!
当你从 C popToViewController
时,将在动画之前调用 A 中的 viewWillAppear
方法。现在,此时,由于转换正在进行中,您可能会在调试器中收到某种警告,例如:
"Warning: Attempting to push .... while a transition is in progress"
您需要以不相互重叠的方式调用导航控制器方法。
在这种情况下,在 A 的viewDidAppear
方法中调用 pushViewController
会更好。