如何构建动态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] } }
在新评论之后,我会这样做:
-
使用变量text,images,id,day等来制作一些Poll对象。
-
使用Poll对象初始化PollViewModel,它将响应数据表示
-
使用PollViewModel初始化UIViewController / UITableViewController子类
-
为poll UI的每个部分创建UITableViewCell的子类,可以在UITableView中显示它
-
使用FireBase中的当前Poll对象数组初始化PageViewTutorial类(或其自己的ViewModel)
-
在UIPageViewControllerDataSource中处理来自数组的对象,并返回使用带有poll对象初始化的模型初始化的vc。 ;)