【问题标题】:UINavigationController interactivePopGestureRecognizer working abnormal in iOS7UINavigationController interactivePopGestureRecognizer在iOS7中工作异常
【发布时间】:2014-01-26 08:10:07
【问题描述】:

在 iOS7 中,我们有一个新的“从左向右滑动”手势,这是一个非常有用的功能,但现在我遇到了问题。

我使用此代码自定义UINavigationBar 中的后退按钮。

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];

但这会禁用“从左向右滑动”手势,所以我使用以下代码来保持手势启用。

self.navigationController.interactivePopGestureRecognizer.delegate = self

然后,我发现手势工作异常,如果当前ViewController有一个tableView,当tableView滚动时,手势不会被触发。现在手势不能轻易触发,有什么办法可以解决吗?

【问题讨论】:

  • 您是否尝试在您的 ´UIGestureRecognizerDelegate´ 上实现:´– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:´ 然后您可以检查其中一个手势是否是 swipetopop 手势并返回 YES。
  • @PeterSegerblom 它有效!我实现了 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer, return YES; 来禁用 otherGestureRecognizer,所以当前的 ViewController 不会收到 UIPanGestureRecognizer 滚动 UITableView。现在看起来很好,非常感谢!
  • Swift 3 解决方案:stackoverflow.com/a/43433530/308315

标签: ios iphone objective-c ios7 uinavigationbar


【解决方案1】:

这段代码很适合我。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return [gestureRecognizer isKindOfClass:UIScreenEdgePanGestureRecognizer.class];
}

【讨论】:

    【解决方案2】:

    interactivePopGestureRecognizer.delegate 设置为self 只是第一步。第二步,实现

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return !(otherGestureRecognizer is UIPanGestureRecognizer)
    }
    

    需要对平移手势识别器进行测试,以在交互式弹出过程中阻止滚动或表格视图的垂直滚动。

    【讨论】:

    • UITableView滚动时,这段代码不会触发UIScreenEdgePanGestureRecognizer,我实现了- (BOOL)shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizerreturn YES;
    【解决方案3】:

    添加类控制器“UIGestureRecognizerDelegate”

    在 viewDidAppear 中添加

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        
        self.navigationController?.interactivePopGestureRecognizer.delegate =  self
    }
    

    =)

    【讨论】:

    • ViewDidAppear 方法中不需要。
    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 2014-12-02
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多