Ich habe das grundlegende Tutorial here zum Erstellen eines UIPageViewController, der durch verschiedene ViewController, die ich alle auf Main.Storyboard erstellt Swipe. Ich möchte eine Anwendung erstellen, die dynamische ViewControllers erzeugt, was bedeutet, dass ich die ViewControllers im UIPageViewController programmatisch instanziieren muss.So erstellen Sie einen dynamischen UIPageViewController
Ich versuche jedoch, alles ein bisschen weiter zu gehen. Ich werde eine dynamische Reihe von ViewControllern zur Anzeige basierend auf Daten in Firebase haben. Bei jedem Wischen möchte ich eine Ansicht instanziieren, die ein Bild enthält (das Bild wird in Amazon Web Services gespeichert und eine Verknüpfung zum Bild wird in Firebase gespeichert). Ich habe dieses Setup derzeit in meiner Android-Anwendung und benutze Picasso, um das Bild in mein Fragment zu laden.
Da all Daten dynamisch sein wird, möchte ich den besten Weg zu finden:
-Instantiate neuen Viewcontrollers auf Basis von dynamischen Daten, die Feuerbasis jeden Tag
-Haben jede Viewcontroller Anzeige wechselt das verknüpfte Bild, das ich in Firebase gespeichert habe
Alle ViewControllers haben das gleiche "Skelett", was bedeutet, dass jedes Bild mit einem Text versehen ist. Unten ist mein aktueller Code, und ich hatte gehofft, einige Ratschläge/Hilfe zu erhalten.
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]
}
}
Hallo, und was ist das Endziel? Wie sollte es für den Benutzer funktionieren? Es sieht wie eine Bildergalerie aus. Wenn dem so ist, denke ich nicht, dass Sie "dynamische ViewControllers" brauchen. Sie benötigen lediglich eine Sammlungsansicht mit cell.size = screen.size. Wie auch immer, wenn Sie diesen Satz brauchen, ist es besser, ihn über seine Variablen zu initiieren. Gib pls mehr Details. –
Es ist im Grunde eine Abfrageanwendung. Jeden Tag werde ich eine bestimmte Anzahl von Umfragen zur Verfügung haben. Ich möchte, dass jeder ViewController eine Umfrage mit einem Bild, einer Frage und Abstimmknöpfen darstellt. Es ist dynamisch in dem Sinne, dass an Tag 1 10 Umfragen stattfinden, an Tag 2 nur 3 Umfragen .... – tccpg288