有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到A From C之后,A不能再推送到B.
和其他pushViewController:
一切都无法正常工作,popViewControllerAnimated:
也会导致崩溃。
注意。
试过了
// in A view
dispatch_async(dispatch_get_main_queue(),^{
[self.navigationController pushViewController:B_viewController animated:YES];
})
this post中的,但它对我不起作用。
有谁知道视图控制器堆栈中会发生什么?
整天都在这个问题上挣扎,任何帮助都会受到赞赏!
答案 0 :(得分:0)
当您从C popToViewController
时,在动画之前调用A中的viewWillAppear
方法。现在,此时,由于转换正在进行中,您可能会在调试器中收到某种警告,如:
"Warning: Attempting to push .... while a transition is in progress"
您需要调用导航控制器方法,使它们不会相互重叠。
在这种情况下,在A的pushViewController
方法中调用viewDidAppear
会更好。