如何构建一个动态UIPageViewController
我遵循基本教程here来创建一个UIPageViewController,通过不同的ViewControllers进行滑动,所有这些都是我在Main.Storyboard上创建的。我想创建一个生成动态ViewControllers的应用程序,这意味着我将不得不以编程方式实例化UIPageViewController中的ViewControllers。如何构建一个动态UIPageViewController
但是,我正试图让所有事情进一步深入。我将根据Firebase中的数据显示一组动态ViewController。在每次刷卡时,我想实例化一个将包含图像的视图(该图像将存储在Amazon Web Services上,并且该图像的链接将存储在Firebase中)。我目前在我的Android应用程序中有这个设置,并使用Picasso将图像加载到我的片段中。
由于所有的数据将是动态的,我想找到的最佳方式:基于改变每一天
- 具备每视图控制器显示动态火力数据
-Instantiate新ViewControllers我已经存储在Firebase中的相关图像
所有的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,一天的等等一些民意调查的对象。
请与投票对象初始化的PollViewModel,那将是应对数据呈现
做一个的UIViewController /的UITableViewController子类与PollViewModel
初始化做的UITableViewCell的子类投票的每一个部分UI,可以在UITableView中显示它
使用FireBase的当前数组Polling对象初始化PageViewTutorial类(或其自己的ViewModel)
在UIPageViewControllerDataSource中处理来自数组的对象并返回vc使用poll对象初始化模型进行初始化。 ;)
嗨,最终目标是什么?它应该如何为用户工作?它看起来像一个图片库,如果是这样,我不认为你需要“拥有一组动态的ViewController”。所有你需要的是一个cell.size = screen.size的集合视图。无论如何,如果你需要这个集合,我想通过它的变量来启动它是更好的方法。给予更多细节。 –
它基本上是一个投票应用程序。每天我都会有一定数量的民意调查。我希望每个ViewController用一个图像,一个问题和投票按钮来表示轮询。这是动态的,因为在第1天可能有10个民意调查,第2天只有3个民意调查...... – tccpg288