ios - 如何使用 UIPageViewController

标签 ios xcode swift uipageviewcontroller

View of my viewController

首选 Swift 语言。

我希望 UIPageViewController 中包含三个 viewController(查看图像)。 我不知道如何将三个 viewControllers 正确地实现到 UIPageViewController 中,在我发布这个问题之前,我在论坛上四处寻找类似的问题,但我没有找到任何问题。

在白色的 viewController 上,我已经将其他 viewController 连接到它上面,我基本上只想要像“Youtube”和“SnapChat”一样的滑动导航。

我是 Xcode 的新手,如果可能的话,请详细解释一下,以便我理解它的概念。(我已经在 Apple 的网站上阅读了关于 UIPageViewController 的内容。)

首选 Swift 语言。 感谢您的帮助。

最佳答案

您可以通过多种方式使用它。这就是我喜欢的方式。

class PagingController: UIViewController, UIPageViewControllerDataSource {

    let pageController:UIPageViewController

    //Initializing PageController
    required init(coder aDecoder: NSCoder) {
        pageController = UIPageViewController(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: nil)
        super.init(coder: aDecoder)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        //Assingning the protocol inplemetation
        pageController.dataSource = self
        //Adding the view
        if let initialViewController = viewControllerAtIndex(0) {
            pageController.setViewControllers([initialViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated:false, completion: nil)
            addChildViewController(pageController)
            view .addSubview(self.pageController.view)
            pageController.didMoveToParentViewController(self)
        }
    }


    //Adding the next view controller
    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
        let currentDay = ((viewController as! UINavigationController).viewControllers[0] as! DietDayTableViewController).currentDay
        let nextDay = (currentDay + 1) % 7

        return viewControllerAtIndex(nextDay)
    }


    //Adding the previous view controller
    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
        let currentDay = ((viewController as! UINavigationController).viewControllers[0] as! DietDayTableViewController).currentDay

        let previousDay = ((currentDay - 1) + 7) % 7

        return viewControllerAtIndex(previousDay)
    }


    //A function witch gives me the right view controller for each page
    func viewControllerAtIndex(index:Int) -> UINavigationController?{
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        if let vc = storyboard.instantiateViewControllerWithIdentifier("DietDayTableViewController") as? DietDayTableViewController {
            vc.currentDay = index
            return UINavigationController(rootViewController: vc)
        }

        return nil
    }
}

我添加评论以寻求帮助。该 pageController 适用于一周中的几天。每个页面都是一天,我为每个页面使用相同的 viewController 。 pageviewcontroller 的概念是你已经分配了前一个 View Controller 和当前 View Controller 的下一个。

关于ios - 如何使用 UIPageViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33564949/

相关文章:

ios - 在不缓存的情况下在 Swift 中下载文件

iphone - VIewController/Views 上的数据保留

ios - 在 AVAudioSession 中使用蓝牙播放

ios - 以外语显示 JSON 文本

iOS 谷歌地图,集群和单个标记的不同自定义图像

ios - 泄漏从未出现在 Xcode 6.1.1 Instruments 工具中

ios - 不同 View Controller 上的重复按钮操作?

ios - Xcode 8 测试版 4 : Build fails with "The following binaries use incompatible versions of Swift:" error

swift - 在 UICollectionViewCompositionalLayout/UICollectionViewDiffableDataSource 的两个不同部分显示相同的对象

swift - 导航栏中的后退按钮重叠,swift 4