如何使用 uibutton 在 uipageviewcontroller 中推进页面 uiviewcontroller/storyboard

How to advance page in uipageviewcontroller with uibutton on uiviewcontroller/storyboard

我有一个非常具体的用例,我想知道是否有人处理过。我想在我的第一次用户体验 UIPageViewController 上添加一个 "Continue" 按钮。这篇文章 (),如果你想让它出现在每一页上,但我不打算使用那么广泛。

我有一个 UIPageViewController 和 6 个视图控制器,我目前可以通过滑动来浏览它们。

我已经尝试将按钮连接到视图控制器作为一个 segue,但是它在 PageViewController 之外呈现。我曾想过尝试将从右到左的滑动推到按钮点击上,但我无法放弃这个想法。

有人知道如何攻击将单个按钮放在其中一个视图控制器上,并让它进入 UIPageViewController 中的下一个视图控制器吗?


这被标记为重复,但在 SO 上没有此问题的重复案例。很少有类似的,但没有类似的。如果有,请link它。当前 linked 版本是对类似问题的 obj-c 答案,没有解释如何 link 视图控制器所需的功能。这个答案我可以很容易地实现为全局按钮,但它不包括单个视图控制器按钮。

谢谢


编辑最终代码解决方案。

所以这是在 swift 3.

中编码的两部分解决方案

在uipageviewcontroller数据源扩展中,翻页函数构建如下

func goNextPage() {
   let cur = self.viewControllers![0]
   let p = self.pageViewController(self, viewControllerAfter: cur)
   self.setViewControllers([p!], direction .forward, animated: true, completion: nil)
  }

individual view controller中的piece构建如下

@IBAction func nextPageButtonWasTapped(_ sender: Any) {
  var candidate: UIViewController = self
  while true {
    if let pageViewController = candidate as? MyUIPageViewController {
        pageViewController.goNextPage()
        break
    }
    guard let next = parent else { break }
    candidate = next
  }
}

在视图控制器层次结构中向上查找页面视图控制器。当你找到它时,让它翻页:

@IBAction func nextPageButtonWasTapped(_ sender: AnyObject?) {
    var candidate: UIViewController = self
    while true {
        if let pageViewController = candidate as? UIPageViewController {
            candidate.navigateForward()
            break
        }
        guard let next = parentViewController else { break }
        candidate = next
    }
}

基于 this answer.

的 Objective-C 版本,在 UIPageViewController 的扩展中实施 navigateForward