加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – interactivePopGestureRecognizer破坏了根视图控制器上

发布时间:2020-12-14 05:24:10 所属栏目:百科 来源:网络整理
导读:在我的UINavigationController中,我添加了自定义后退按钮,其副作用是不再可以从左向右滑动以弹出视图控制器并导航回来. 所以我在自定义UINavigationController类中实现了interactivePopGestureRecognizer: class UINavigationControllerExtended: UINavigat
在我的UINavigationController中,我添加了自定义后退按钮,其副作用是不再可以从左向右滑动以弹出视图控制器并导航回来.

所以我在自定义UINavigationController类中实现了interactivePopGestureRecognizer:

class UINavigationControllerExtended: UINavigationController,UIGestureRecognizerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        if self.respondsToSelector(Selector("interactivePopGestureRecognizer")) {
            self.interactivePopGestureRecognizer?.delegate = self
        }
    }

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer,shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer,shouldBeRequiredToFailByGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return gestureRecognizer.isKindOfClass(UIScreenEdgePanGestureRecognizer)
    }
}

这工作正常,除非我在我的根视图控制器(RVC)中,它是一个UICollectionViewController,即导航堆栈中最底层的视图控制器.当我从左到右滑动手势时,似乎没有任何事情发生,正如预期的那样.但是当我点击UICollectionViewCell时,目标视图控制器(DVC)不会被推过RVC.相反,我只在屏幕右侧看到DVC的阴影.

RVC不再响应,但当我再次从左向右滑动时,DVC以交互方式从右向左移动到屏幕中.当我完成手势时,DVC完全移动到屏幕中,以便从左到右快速消失. RVC再次响应.

所以似乎DVC被推到了导航堆栈上,但没有明显地进入屏幕.

这个奇怪的行为起源的任何建议?

我目前的解决方案是禁用根视图控制器中的interactivePopGestureRecognizer:
override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    self.navigationController?.interactivePopGestureRecognizer?.enabled = false
}

在第一个子视图控制器中,我再次启用它.但这似乎更像是一种解决方法,因为我不了解导航堆栈首先搞砸的实际问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读