停止 UIPageViewController 的滚动事件
Posted
技术标签:
【中文标题】停止 UIPageViewController 的滚动事件【英文标题】:Stop scroll events for UIPageViewController 【发布时间】:2015-04-23 14:08:31 【问题描述】:我的 ViewController 中有一个 UIPageViewController。我的 PageViewController 中有四个视图。我希望视图不应该在右侧滚动的第一个视图和左侧滚动的第四个视图上滚动。我怎么做?基本上我需要像(BOOL)scrollViewShouldScroll:
这样的方法
我尝试使用scrollViewDidBeganDragging
并设置 contentOffset 属性,将panGestureRecognizer
's enabled 设置为false/true
,但它确实会停止滚动但运气不好。
【问题讨论】:
你想要这个吗:禁用 已禁用? 是的,但它是 [0]...[3]但没有问题。 @Masterfego 怎么做? 【参考方案1】:我已经创建了两个 ViewController:
RootViewController:我在其中管理 UIPageViewControllerDataViewcontroller:我在哪里显示我想要的(我们的页面)
class RootViewController: UIViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource
var pageData:[String] = [] // where I store images names
实现这两种方法:
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
if !viewController.isKindOfClass(DataViewController) // Specify your type
return nil
var index:Int = indexOfViewController(viewController as! DataViewController)
if index == 0
return nil
else if index == NSNotFound
return nil
index--
return self.viewControllerAtIndex(index)
.
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
if !viewController.isKindOfClass(DataViewController) // Specify your type
return nil
var index:Int = indexOfViewController(viewController as! DataViewController)
if index == NSNotFound
return nil
index++
if index == self.pageData.count
return nil
return self.viewControllerAtIndex(index)
个人职能:
func indexOfViewController(viewController: DataViewController) -> Int
return find(pageData, viewController.dataObject)!
.
func viewControllerAtIndex( index: Int) -> DataViewController!
if pageData.count == 0 || index >= pageData.count
return nil
var dataVC:DataViewController = self.storyboard!.instantiateViewControllerWithIdentifier("DataViewController") as! DataViewController
dataVC.dataObject = pageData[index] as String
return dataVC
【讨论】:
您是否测试过您的代码。我已经尝试过了,但它不起作用。返回 nil 只是停止显示任何视图控制器,但不会停止滚动事件。 这段代码有效,它实际上是我在应用商店发布的应用程序中使用的,给你我的代码的一部分给你灵感。您必须关注前两个数据源方法: func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? 和 func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController ) -> UIViewController? 你可以发布你的代码 我想要的是当你在第四个屏幕上向左滚动时它应该什么都不做。它不应该显示我的父视图的黑屏。视图应该保持静止。 @Masterfego 流星需要的是暂停监听滚动事件,直到某个布尔变量为真。再次开始监听滚动事件。但是在前后控制视图控制器只会在滚动后显示黑屏,当布尔变量为真时,您需要先返回然后再下一步,以使用户继续使用新的视图控制器。以上是关于停止 UIPageViewController 的滚动事件的主要内容,如果未能解决你的问题,请参考以下文章
在 UIPageviewcontroller 中停止 HTML5 音频
UIPageViewController 在 SwiftUI 中滑动 1 次后停止工作
Swift UIPageViewController & UIActivityIndicatorView