• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 仅在 uiPageViewController 中禁用临时向前滑动

[复制链接]
菜鸟教程小白 发表于 2022-12-11 17:44:17 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用 uiPageViewController(底部的图像)编写一系列设置/设置屏幕。用户配置东西,然后滑动到下一个屏幕,依此类推。但我想锁定/禁用/阻止向前滑动,直到用户在当前屏幕中完成设置。

我试过了:

1) uiPageViewController.view.userInteractionEnabled = false。它会阻止屏幕上的所有内容,包括向后滑动。我只想阻止前锋。

2)

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
    if !forwardSwipeEnabled {
        return nil
    }
    var index  = contentViewControllers.indexOf(viewController)
    index += 1
    return contentViewControllers[index]
}

return nilforwardSwipeEnabled 设置为 false 时,它可以工作,但是即使在我更改 forwardSwipeEnabled = 后,向前滑动仍然被阻止true 因为当场景出现在屏幕上时 UIPageViewController 已经调用了这个函数。

如果我再次来回前进,则再次调用该函数并且它可以工作。

-- 编辑 -----

使用当前 View Controller 调用 pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: nil) 不会刷新或再次调用该函数。

3) 仅在用户完成后追加下一个屏幕(UIViewcontroller),但会出现与 2) 相同的问题。

-- 编辑 -----

4) 我可以使用 view.subviews.first?.gestureRecognizers 获得手势识别器,但设置它们 gestureRecognize.enabled = false 会阻止正向和反向。每个人都没有不同的手势识别器可以选择性地阻止。

5) 在方向为正向或让它运行时拦截手势并吃掉它,反向时底部代码不起作用,因为用户可以开始向后滑动,触发函数返回并向前完成。

override func viewDidLoad() {
    super.viewDidLoad()
    for view: UIView in pageViewController!.view.subviews {
        if (view is UIScrollView) {
            let scrollView = (view as! UIScrollView)
            self.scrollViewPanGestureRecognzier = UIPanGestureRecognizer()
            self.scrollViewPanGestureRecognzier.delegate = self
            scrollView.addGestureRecognizer(scrollViewPanGestureRecognzier)
        }
    }
}

    func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
    if gestureRecognizer == scrollViewPanGestureRecognzier {
        guard let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer else { return false }
        let velocity = panGestureRecognizer.velocityInView(view)
        let translation = panGestureRecognizer.translationInView(view)
        if translation.x < 0 {
            return true
        }
        if velocity.x < 0 {
            return true
        }
        return false
    }
    return false
}

示例屏幕:

example enter image description here



Best Answer-推荐答案


作为一个建议,您可以在完成工作后使用 setViewControllers:direction:animated:completion 重新加载数据源。这应该可以修复您的下一页。 它的 obj-c 代码。它应该在 swift 中具有相同的代码。

关于ios - 仅在 uiPageViewController 中禁用临时向前滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39858455/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap