如何构建动态UIPageViewController

我已经按照这里的基本教程创建了一个UIPageViewController,它可以浏览不同的ViewControllers,我在Main.Storyboard上创建了所有这些。 我想创建一个生成动态ViewControllers的应用程序,这意味着我必须以编程方式在UIPageViewController中实例化ViewControllers。

但是,我试图进一步采取一切措施。 我将根据Firebase中的数据显示一组动态的ViewControllers。 在每次滑动时,我想实例化一个包含图像的视图(图像将存储在Amazon Web Services上,并且图像的链接将存储在Firebase中)。 我目前在我的Android应用程序中进行了此设置,并使用Picasso在我的片段中加载图像。

由于所有数据都是动态的,我想找到最好的方法:

– 根据每天更改的动态firebase数据来实例化新的ViewControllers

– 让每个ViewController显示我存储在Firebase中的相​​关图像

所有的ViewControllers都具有相同的“骨架”,这意味着每个ViewControllers都会有一个带有一些文本的图像。 以下是我目前的代码,我希望得到一些建议/帮助。

import UIKit class PageViewTutorial: UIPageViewController { override func viewDidLoad() { super.viewDidLoad() dataSource = self if let firstViewController = orderedViewControllers.first { setViewControllers([firstViewController], direction: .Forward, animated: true, completion: nil) } } //this will be dynamic based on firebase data private(set) lazy var orderedViewControllers: [UIViewController] = { return [self.newColoredViewController("Green"), self.newColoredViewController("Red"), self.newColoredViewController("Blue")] }() private func newColoredViewController(color: String) -> UIViewController { return UIStoryboard(name: "Main", bundle: nil) . instantiateViewControllerWithIdentifier("\(color)ViewController") } } // MARK: PageViewTutorialDataSource extension PageViewTutorial: UIPageViewControllerDataSource { func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { guard let viewControllerIndex = orderedViewControllers.indexOf(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, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { guard let viewControllerIndex = orderedViewControllers.indexOf(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] } } 

在新评论之后,我会这样做:

  1. 使用变量text,images,id,day等来制作一些Poll对象。

  2. 使用Poll对象初始化PollViewModel,它将响应数据表示

  3. 使用PollViewModel初始化UIViewController / UITableViewController子类

  4. 为poll UI的每个部分创建UITableViewCell的子类,可以在UITableView中显示它

  5. 使用FireBase中的当前Poll对象数组初始化PageViewTutorial类(或其自己的ViewModel)

  6. 在UIPageViewControllerDataSource中处理来自数组的对象,并返回使用带有poll对象初始化的模型初始化的vc。 ;)