UIPageControl用于显示当前页面

3

我创建了一个PageViewController来在不同的视图控制器之间进行切换,并且我想显示我们所看到的页面。我添加了一个pageControl,并给它以下代码。

pageControl.currentPageIndicatorTintColor = UIColor.blueColor()
pageControl.pageIndicatorTintColor = UIColor.lightGrayColor()
pageControl.numberOfPages = pages.count

完整代码如下:
import UIKit

class ViewControllerSportinfrastructuur: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

@IBOutlet weak var pageControl: UIPageControl!

var pageViewController: UIPageViewController!
let pages = ["PageOneViewController", "PageTwoViewController"]

//MARK: - page view controller data source
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {

    if let index = pages.indexOf(viewController.restorationIdentifier!) {
        if index > 0 {
            return viewControllerAtIndex(index - 1)
        }
    }

    return nil
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {

    if let index = pages.indexOf(viewController.restorationIdentifier!) {
        if index < pages.count - 1 {
            return viewControllerAtIndex(index + 1)
        }
    }
    return nil
}

func viewControllerAtIndex(index: Int) -> UIViewController? {
    let vc = storyboard?.instantiateViewControllerWithIdentifier(pages[index])
    return vc
}

override func viewDidLoad() {
    super.viewDidLoad()

    if let vc = storyboard?.instantiateViewControllerWithIdentifier("MyPageViewController") {
        self.addChildViewController(vc)
        self.view.addSubview(vc.view)

        pageViewController = vc as! UIPageViewController
        pageViewController.dataSource = self
        pageViewController.delegate = self
        pageViewController.setViewControllers([viewControllerAtIndex(0)!], direction: .Forward, animated: true, completion: nil)
        pageViewController.didMoveToParentViewController(self)

        pageControl.currentPageIndicatorTintColor = UIColor.blueColor()
        pageControl.pageIndicatorTintColor = UIColor.lightGrayColor()
        pageControl.numberOfPages = pages.count
    }
}

有人知道我应该使用什么代码来设置当前页面吗?提前感谢!

3个回答

6

编辑:我已经找到了答案!

在以下函数中,我添加了pageControl.currentPage = index

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {

    if let index = pages.indexOf(viewController.restorationIdentifier!) {
        pageControl.currentPage = index
        if index > 0 {
            return viewControllerAtIndex(index - 1)
        }
    }

    return nil
}

并对viewControllerAfterViewController函数进行了相同的操作!

1
如果您启用了滚动功能,不建议基于此编写代码。如果启用了滚动,则用户可能会滚动到末尾或快速返回到末尾,在这种情况下,我发现这些方法实际上会干扰当前视图控制器。如果要避免此故障,请使用UIPageViewController委托方法func pageViewController didFinishAnimating,并在检查“completed”时检索当前视图控制器作为pageViewController.viewControllers.first。 - Fawkes

0

UIPageViewController 提供了一个默认的 UIPageControl - 如果您没有特定的自定义要求,我建议您使用它。

为了显示它,您需要在您的 UIPageViewControllerDataSource 中实现以下两个可选方法:

func presentationCount(for pageViewController: UIPageViewController) -> Int {
    return n //number of view controllers
}

func presentationIndex(for pageViewController: UIPageViewController) -> Int {
    return i //index of the visible view controller
}

-1

设置 pageViewController.delegate = self,并实现协议 UIPageViewControllerDelegate

使用以下方法之一来设置 self.pageControl.currentPage = ...

optional func pageViewController(_ pageViewController: UIPageViewController,
 willTransitionToViewControllers pendingViewControllers: [UIViewController])

optional func pageViewController(_ pageViewController: UIPageViewController,
              didFinishAnimating finished: Bool,
         previousViewControllers previousViewControllers: [UIViewController],
             transitionCompleted completed: Bool)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接