gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:57:04 35 4
gpt4 key购买 nike

我正在使用 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]
}

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

如果我再次返回和返回,该函数将被再次调用并且它可以工作。

-----编辑-----

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

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

-----编辑-----

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

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

最佳答案

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

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

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