gpt4 book ai didi

ios - interactivePopGestureRecognizer 弹出太多 View

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:39 24 4
gpt4 key购买 nike

我在同一个 UINavigationController 上有两个不同的 UIViewControllers。两者都包含一个 tableview。如果第一个 View 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>

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

最佳答案

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

有关更多信息和可能的修复,请参阅: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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com