如何使用按钮在 UIPageViewController 中向前和向后导航?
Posted
技术标签:
【中文标题】如何使用按钮在 UIPageViewController 中向前和向后导航?【英文标题】:How do I navigate forward and backward within UIPageViewController using buttons? 【发布时间】:2017-12-22 19:51:46 【问题描述】:我正在为一家物理治疗诊所的新患者创建一个入职应用程序。新患者将在UIPageViewController
内的每个视图控制器上回答问题,然后点击按钮转到下一个问题。
我按照教程设置了我的 UIPageViewController
PageVC
以及 3 个视图控制器。 PageVC
当前通过滑动更改页面,但我希望能够使用两个按钮在视图控制器中向后和向前导航,这些按钮是 PageVC
本身的子视图。我该如何做到这一点?
我喜欢使用UIPageViewController
并想进一步了解它。如果除了使用UIPageViewController
之外还有更有效的方法来完成同样的任务,我很乐意考虑。
class PageVC: UIPageViewController, UIPageViewControllerDataSource
private(set) lazy var orderedViewControllers: [UIViewController] =
return [self.VCInstance(name: "BodyChart"),
self.VCInstance(name: "Symptoms"),
self.VCInstance(name: "HadSurgery")]
()
private func VCInstance(name: String) -> UIViewController
return UIStoryboard(name: "Main", bundle: nil) .
instantiateViewController(withIdentifier: name)
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?
guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else
return nil
let previousIndex = viewControllerIndex - 1
guard previousIndex >= 0 else
return nil
guard orderedViewControllers.count > previousIndex else
return nil
return orderedViewControllers[previousIndex]
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?
guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else
return nil
let nextIndex = viewControllerIndex + 1
let orderedViewControllersCount = orderedViewControllers.count
guard orderedViewControllersCount != nextIndex else
return nil
guard orderedViewControllersCount > nextIndex else
return nil
return orderedViewControllers[nextIndex]
override func viewDidLoad()
super.viewDidLoad()
dataSource = self
if let firstViewController = orderedViewControllers.first
setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)
【问题讨论】:
可能重复:link 【参考方案1】:我想你要找的是here. 但这是另一种方式。
UIPageViewController 有一个实例方法转换。下面的sn-p会从第一页子视图控制器移动到第二页。
pageViewController.transition(from: pageViewController.viewControllers[0], to: pageViewController.viewControllers[1], duration: 0.3, options: UIViewAnimationOptions.curveEaseInOut, animations: nil, completion: nil)
PageVC 目前通过滑动来更改页面,但我希望能够使用两个按钮在视图控制器中前后导航
将您的按钮添加到页面内容,然后禁用horizontal scrolling on PageVC's scrollview 或以有礼貌的方式禁用视图的用户交互。
【讨论】:
以上是关于如何使用按钮在 UIPageViewController 中向前和向后导航?的主要内容,如果未能解决你的问题,请参考以下文章
UIPageViewController 手势覆盖我的 UITableView
在 UIPageViewController 中获取用户滑动方向
UIPageViewControllers UIPageControl 在过渡期间出现故障
UIPageControl 将图像移到它上面(而不是在它上面)