interactivePopGestureRecognizer弹出太多视图

时间:2014-01-02 17:09:53

标签: ios iphone objective-c uinavigationcontroller

我在同一个UIViewControllers上有两个不同的UINavigationController。两者都包含tableview。 如果轻敲第一个视图控制器上的一个单元,则按下第二个控制器。 如果按下第二个控制器中的一个单元,则按下第二个控制器的另一个实例。

当使用后退按钮返回时,这一切都完美无缺。但是,当使用iOS 7的interactivePopGestureRecognizer时,从第二个视图的一个实例移动到另一个实例会导致崩溃。

我有语句记录导航控制器活动和手势识别器开始。

这是启动然后取消弹出手势时的输出:

Push <ViewController2: 0x15597f60>
Will show <ViewController2: 0x15597f60>
Did show <ViewController2: 0x15597f60>

Push <ViewController2: 0x15638b80>
Will show <ViewController2: 0x15638b80>
Did show <ViewController2: 0x15638b80>

Interactive pop started
Will show <ViewController2: 0x15597f60>
永远不会调用

-navigationController:didShowViewController:animated:。在此之后,再次尝试手势将返回第一个视图控制器(即一个弹出太多),但导航栏仍将显示后退按钮和第二个视图的标题。 / p>

然后这是尝试正常弹出时的输出:

Push <ViewController2: 0x15597f60>
Will show <ViewController2: 0x15597f60>
Did show <ViewController2: 0x15597f60>

Push <ViewController2: 0x15638b80>
Will show <ViewController2: 0x15638b80>
Did show <ViewController2: 0x15638b80>

Interactive pop started
Will show <ViewController2: 0x15597f60>
Unbalanced calls to begin/end appearance transitions for <ViewController1: 0x156e7050>.
Did show <ViewController1: 0x156e7050>

有关为何发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:2)

问题是导航栏是隐藏的。如果启用导航栏,问题就会消失。这绝对是Apple实施中的一个错误。当我给它一个赏金时找到答案。让人惊讶。

有关详细信息和可能的解决方法,请参阅此处:https://stackoverflow.com/a/19834167/505259

更新: 丹尼斯的解决方法对我不起作用。我现在正在研究的一个解决方法是永远不要触及interactivePopGestureRecognizer的委托。不要管它。我建议保持navigationBar活着但隐藏(不使用隐藏属性,可能是手动隐藏子视图或将导航栏图层重新排序到后面)。

第二次更新: 您可以保留对当前interactivePopGestureRecognizer的委托(这是您不应该触及的私人对象)的引用。然后,当您将委托设置为您自己的自定义实现时,将委托方法调用传递回原始私有对象。这应该完全解决问题。