代码之家  ›  专栏  ›  技术社区  ›  Isaac Dontje Lindell

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

  •  1
  • Isaac Dontje Lindell  · 技术社区  · 10 年前

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

    但是,如果用户触发 popViewController:动画:是 而pushViewController动画仍在进行 ,我收到一条记录到控制台的消息:

    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.
    

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

    我该怎么做才能避免这种比赛状况?我的第一个想法是保护 popView控制器 调用并检查当前导航动画是否已发生,并等待其完成(甚至取消 popView控制器 完全调用)。然而,我还没有找到一种方法来检测一个动作已经发生了。

    1 回复  |  直到 10 年前
        1
  •  2
  •   Rahul Wakade    10 年前

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

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

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

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

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

    当第一个委托方法被调用时设置一个标志&秒后重置。在每次推/弹出操作中使用此标志。