我的应用中遇到导航控制器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
调用)。但是,我还没有找到一种方法来检测某个动作是否已经发生。
答案 0 :(得分:2)
这个问题有两个解决方案。我建议你先实施一个。
1。通过为它们设置独占触摸,一次避免用户在多个控件上进行交互。
2。在该视图控制器中实现UINavigationControllerDelegate协议,其中用户一次点击多个控件。
– navigationController:willShowViewController:animated:
– navigationController:didShowViewController:animated:
在调用第一个委托方法时设置标志&在第二个重置它。在每次推/弹操作时使用此标志。