检测UIPageViewController的当前页面
我想要检测当前页面,以便在最后一页显示时修改按钮的标题,并在用户每次从最后一页滑回第二页时重新修改。检测UIPageViewController的当前页面
现在,这些是我的委托方法和我的ViewControllers的数组:
lazy var VCArr: [UIViewController] = {
let firstVC = self.storyboard!.instantiateViewController(withIdentifier: "FirstTutorialPage")
let secondVC = self.storyboard!.instantiateViewController(withIdentifier: "SecondTutorialPage")
let thirdVC = self.storyboard!.instantiateViewController(withIdentifier: "ThirdTutorialPage")
let fourthVC = self.storyboard!.instantiateViewController(withIdentifier: "FourthTutorialPage")
return [firstVC, secondVC, thirdVC, fourthVC]
}()
委托方法
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = self.VCArr.index(of: viewController) else {
return nil
}
let previousIndex = viewControllerIndex - 1
guard previousIndex >= 0 else {
return nil
}
guard self.VCArr.count > previousIndex else {
return nil
}
return self.VCArr[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = self.VCArr.index(of: viewController) else {
return nil
}
let nextIndex = viewControllerIndex + 1
guard nextIndex < self.VCArr.count else {
return nil
}
guard self.VCArr.count > nextIndex else {
return nil
}
return self.VCArr[nextIndex]
}
有人可以帮助我准确检测出的最后一页?我尝试了一些方法,但是他们中的每个人都给我指出了错误的索引这些方法在显示倒数第二页的同时检测到最后一个索引。
感谢所有。
在这里,你必须使用%
运算符计算一个和下一个项目的索引
let nextIndex = (viewControllerIndex + 1) % VCArr.count
let previousIndex = (VCArr.count + viewControllerIndex - 1) % VCArr.count
它无法正常工作。首先,这种方法可以反复滑动,然后当我向前滑动索引时,打印的是“1 3 2”,只有一个视图被查看。 –
如何检测最后一页?您只需比较下一个/上一个索引与'VCArr.count-1'。如果你想改变按钮文字,给我们更多的代码,并提供更多的细节。 – Szu
我想知道是否有一种方法可以准确检测出嵌入到UIPageViewController中的视图控制器。例如,当用户向左或向右滑动时,我想知道我的数组(VCArr)的哪个viewController正确显示,以便将按钮的标题从“next”更改为“start”,并再次从“start “如果用户从最后一页滑动到第二页到最后一页,则切换到”下一页“。我希望我更好地表达自己。 –
尝试在pageViewController.viewControllers
if let vc = pageViewController.viewControllers?[0] {
... vc is current controller...
}
如果你想要得到的第一个视图控制器的方式要处理页面更改,请在委托方法中执行此操作:
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if let vc = pageViewController.viewControllers?[0] {
... vc is current controller...
}
}
试试这个委托方法。
var currentIndex = 0
func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
guard let nextViewController = pendingViewControllers[0] as? ViewController else { return }
self.currentIndex = nextViewController.index
}
什么时候你想确定显示哪个页面? – DonMag