Ios 如何构建动态UIPageViewController

Ios 如何构建动态UIPageViewController,ios,swift,firebase,viewcontroller,uipageviewcontroller,Ios,Swift,Firebase,Viewcontroller,Uipageviewcontroller,我按照基本教程创建了一个UIPageViewController,它可以浏览不同的ViewController,所有这些都是我在Main.Storyboard上创建的。我想创建一个生成动态ViewController的应用程序,这意味着我必须以编程方式实例化UIPageViewController中的ViewController 然而,我正试图让一切更进一步。我将根据Firebase中的数据显示一组动态ViewController。在每次滑动时,我想实例化一个将包含图像的视图(图像将存储在Ama

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

然而,我正试图让一切更进一步。我将根据Firebase中的数据显示一组动态ViewController。在每次滑动时,我想实例化一个将包含图像的视图(图像将存储在Amazon Web服务上,图像的链接将存储在Firebase中)。我目前在Android应用程序中有这个设置,并使用毕加索将图像加载到我的片段中

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

-基于每天更改的动态firebase数据实例化新的ViewController

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

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

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]
  }
}

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

  • 使用文本、图像、id、日期等变量创建一些轮询对象

  • 使用Poll对象初始化PollViewModel,该对象将响应数据表示

  • 使用PollViewModel初始化UIViewController/UITableViewController子类

  • 为轮询UI的每个部分创建UITableViewCell的子类,并在UITableView中显示它

  • 使用FireBase中轮询对象的当前数组初始化PageViewTutorial类(或其自己的ViewModel)

  • 在UIPageViewControllerDataSource中,处理数组中的对象,并返回初始化为vc的模型,初始化为poll对象


  • 嗨,最后的目标是什么?它应该如何为用户工作?它看起来像一个图片库,如果是这样的话,我认为你不需要“有一套动态的视图控制器”。您只需要一个cell.size=screen.size的集合视图。不管怎样,如果你需要这个集合,我认为通过它的变量初始化它是更好的方法。请提供更多细节。它基本上是一个轮询应用程序。每天,我都会有一定数量的民意测验。我希望每个ViewController都使用一个图像、一个问题和投票按钮来表示投票。这是动态的,因为在第一天可能有10次投票,在第二天可能只有3次投票。。。。