ios - InteractivePopGestureRecognizer 弹出太多 View

标签 ios iphone objective-c uinavigationcontroller

我在同一个 UINavigationController 上有两个不同的 UIViewControllers。两者都包含一个tableview。 如果点击第一个 View Controller 上的一个单元格,则插入第二个 Controller 。 如果第二个 Controller 中的一个单元格被推送,则第二个 Controller 的另一个实例被推送。

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

我有记录导航 Controller 事件和手势识别器启动的语句。

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

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: 永远不会被调用。此后,再次尝试该手势将使您返回到第一个 View Controller (即弹出太多次),但导航栏仍将显示后退按钮和第二个 View 的标题。

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

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>

关于为什么会发生这种情况有什么想法吗?

最佳答案

问题是导航栏被隐藏。如果启用导航栏,问题就会消失。这绝对是苹果实现中的一个错误。当我悬赏它时找到了正确的答案。哎呀。

有关更多信息和可能的修复,请参阅此内容:https://stackoverflow.com/a/19834167/505259

更新: 丹尼斯的解决方法对我不起作用。我现在正在研究的一种解决方法是永远不要触摸 InteractivePopGestureRecognizer 的委托(delegate)。不要管它。我建议保持导航栏处于事件状态但隐藏(不使用隐藏属性,可能通过手动隐藏 subview 或将导航栏层重新排序到后面)。

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

关于ios - InteractivePopGestureRecognizer 弹出太多 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20887956/

相关文章:

ios - NSSet 的 Coredata 获取谓词

ios swift类符合协议(protocol)

ios - 计算与地板的角度

iphone - 如何找出截断的 UILabel 文本的宽度

ios - 一个 Facebook 应用与多个 iOS 应用关联

ios - UITableViewCell约束

ios - "[UIAlertView show]"不显示消息弹窗立即返回

ios - 在iOS上跳过广告无效

android - 从表中选择 2 列,在一个查询

iphone - 在 ios 上通过 Twilio 发送短信?