pushViewController动画时popViewController导致导航栏损坏

时间:2014-08-22 13:37:38

标签: ios animation ios7 uinavigationcontroller

我的应用中遇到导航控制器pushViewController:animated:YES由用户触发的情况。用户还可以通过点击另一个控件来触发popViewController:animated:YES。目的是popViewController是pushViewController的撤消或反转。

但是,如果用户在pushViewController动画仍然发生时触发popViewController:animated:YES ,我会收到一条消息记录到控制台:

2014-08-22 08:26:36.601 MyApp[22380:60b] nested pop animation can result in corrupted    navigation bar
2014-08-22 08:26:36.960 MyApp[22380:60b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

实际上,导航栏确实已损坏:后退按钮不再可见。我必须去做别的事情,然后回到我的应用程序中受影响的页面,让它再次正常工作。

我可以做些什么来避免这种竞争条件?我的第一个想法是通过检查来保护popViewController调用以查看当前的导航动画是否已经发生,并等待它完成(甚至完全取消popViewController调用)。但是,我还没有找到一种方法来检测某个动作是否已经发生。

1 个答案:

答案 0 :(得分:2)

这个问题有两个解决方案。我建议你先实施一个。

1。通过为它们设置独占触摸,一次避免用户在多个控件上进行交互。

  • 如果这些控件共享superView(父视图),则将exclusiveTouch属性设置为YES,否则您必须将此属性设置为YES以显示其父视图。

2。在该视图控制器中实现UINavigationControllerDelegate协议,其中用户一次点击多个控件。

 – navigationController:willShowViewController:animated:
 – navigationController:didShowViewController:animated:

在调用第一个委托方法时设置标志&在第二个重置它。在每次推/弹操作时使用此标志。