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

时间:2016-10-04 17:33:47

标签: ios iphone swift installation uipageviewcontroller

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

我试过了:

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

2)

class VideoScreen extends Component {
    constructor(props) {
       super(props);
       this._currentTime = this._currentTime.bind(this);
    }

    render() {
        return (
           <View refreshing>
               {this._currentTime()}
           </View>
        )
    }

    _currentTime() {
       return (
           <View refreshing>
               <Text>{VideoScreen._toHHMMSS(this.props.currentTime)}
               </Text>
           </View>
       );
    }
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { if !forwardSwipeEnabled { return nil } var index = contentViewControllers.indexOf(viewController) index += 1 return contentViewControllers[index] } 设置为return nil时,

forwardSwipeEnabled,并且它可以工作,但是即使在我更改forwardSwipeEnabled = true之后前向滑动仍然被阻止,因为UIPageViewController在场景中已经调用了此函数出现在屏幕上。

如果我再次前进和后退,该功能会再次被调用并且可以正常工作。

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

使用当前视图控制器调用false不会刷新或再次调用该函数。

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

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

4)我可以使用pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: nil)获取gestureRecognizers,但设置view.subviews.first?.gestureRecognizers可以阻止正向和反向。每个人都没有选择性地阻止不同的gestureRecognizer。

5)当方向前进或让它运行时截取手势并吃掉它,当向后移动时底部代码不起作用,因为用户可以开始向后滑动,触发功能返回并完成前进。 / p>

gestureRecognize.enabled = false

屏幕示例:

example enter image description here

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用UIPageViewController的gestureRecognizers属性。它是一组手势识别器。通过手势识别器循环设置每个isEnabledfalse。准备好后,使用true再次执行此操作。

更简单,只需将UIPageViewController的view isUserInteractionEnabled设置为false,然后设置true

答案 2 :(得分:0)

这些年来您找到解决方案了吗? 我只找到一个:如果禁止前进,请立即返回:

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
    let pageContentViewController = pageViewController.viewControllers![0]
    let currentPage = orderedViewControllers!.index(of: pageContentViewController)!
    if !nextButton.isEnabled && currentPage > pageControl.currentPage {
        DispatchQueue.main.asyncAfter(deadline: .now()+0.05, execute: { 
            self.setViewControllers([self.orderedViewControllers![self.pageControl.currentPage]], direction: .reverse, animated: false, completion: nil)
        })
    }
}