Swift: UIPageViewController Charge des vues séparées
Je suis en suivant ce tutoriel: http://swiftiostutorials.com/ios-tutorial-using-uipageviewcontroller-create-content-slider-objective-cswift/ pour créer une application qui montre plusieurs curseurs.
Même si j'ai eu ce tutoriel pour le travail, Cet exemple, seules les modifications d'une image en fonction de celles qui sont stockées dans un tableau.
Comment puis-je obtenir pour charger ViewControllers au lieu d'images
J'ai 4 ViewControllers:
- ViewController1
- ViewController2
- ViewController3
- ViewController4
Je voudrais glisser un pour montrer ViewController1 et slide2 pour charger ViewController2 etc....
Ici est mon principal ViewController:
import UIKit
class ViewController: UIViewController, UIPageViewControllerDataSource {
//MARK: - Variables
private var pageViewController: UIPageViewController?
//Initialize it right away here
private let contentImages = ["nature_pic_1.png",
"nature_pic_2.png",
"nature_pic_3.png",
"nature_pic_4.png"];
//MARK: - View Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
createPageViewController()
setupPageControl()
}
private func createPageViewController() {
let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("PageController") as UIPageViewController
pageController.dataSource = self
if contentImages.count > 0 {
let firstController = getItemController(0)!
let startingViewControllers: NSArray = [firstController]
pageController.setViewControllers(startingViewControllers, direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
}
pageViewController = pageController
addChildViewController(pageViewController!)
self.view.addSubview(pageViewController!.view)
pageViewController!.didMoveToParentViewController(self)
}
private func setupPageControl() {
let appearance = UIPageControl.appearance()
appearance.pageIndicatorTintColor = UIColor.grayColor()
appearance.currentPageIndicatorTintColor = UIColor.whiteColor()
appearance.backgroundColor = UIColor.darkGrayColor()
}
//MARK: - UIPageViewControllerDataSource
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
let itemController = viewController as PageItemController
if itemController.itemIndex > 0 {
return getItemController(itemController.itemIndex-1)
}
return nil
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let itemController = viewController as PageItemController
if itemController.itemIndex+1 < contentImages.count {
return getItemController(itemController.itemIndex+1)
}
return nil
}
private func getItemController(itemIndex: Int) -> PageItemController? {
if itemIndex < contentImages.count {
let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("ItemController") as PageItemController
pageItemController.itemIndex = itemIndex
pageItemController.imageName = contentImages[itemIndex]
return pageItemController
}
return nil
}
//MARK: - Page Indicator
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return contentImages.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
return 0
}
et voici mon PageItemController:
import UIKit
class PageItemController: UIViewController {
//MARK: - Variables
var itemIndex: Int = 0
var imageName: String = "" {
didSet {
if let imageView = contentImageView {
imageView.image = UIImage(named: imageName)
}
}
}
@IBOutlet var contentImageView: UIImageView?
//MARK: - View Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
contentImageView!.image = UIImage(named: imageName)
}
}
Je suis nouveau sur Swift/Développement iOS et vraiment essayer d'obtenir par le développement. Je vous remercie d'avance pour vos réponses 🙂
EDIT: Pour Rendre la Question Claire
Comment puis-je faire pour qu'il y est un tableau d'affichage des contrôleurs qui correspondent le faites glisser vers la gauche/droite de la UIPageViewController?
Alors, quand je balayez vers la gauche sur ViewController1 - le UIViewController2 est chargé et à l'inverse pour balayez vers la droite.
chacun des ViewControllers que j'ai précisé ci-dessus ont un contenu comme les formes/graphiques/images etc... Comment puis-je spécifier lequel spectacle basé sur le parchemin. Au moment de sa seule boucle dans un tableau d'images.
Je ne sais pas comment car je ne sais pas ce que vous voulez faire. Une seule chose compte: à chaque fois
viewControllerBeforeViewController
ou viewControllerAfterViewController
est appelé, à vous de décider, à droite, puis et là, ce que la vue du contrôleur de charge. Afin de décider!C'est une absurdité totale. Vous pouvez lire l'Objective-C parfaitement bien. La langue n'a rien à voir avec cela.
Mais vous pouvez comprendre le concepts quelle que soit la langue de la discussion. La lecture et l'écriture sont deux choses différentes. La pensée et l'écriture sont deux choses différentes. Lire. Pense. Alors écrire (votre code Swift). Personne ne va l'écrire pour vous. Ne cherchez pas de code à copier. Recherchez connaissances.
OriginalL'auteur DannieCoderBoi | 2015-02-09
Vous devez vous connecter pour publier un commentaire.
En supposant que vous avez vue les contrôleurs de 1 à 4 définies dans la même table de montage séquentiel comme votre UIPageViewController, et vous devez leur Storyboard Id défini comme ViewController0, ViewController1, et cetera, puis de créer une méthode pour remplir votre point de vue contrôleur de matrice et de l'appeler dans votre
viewDidLoad()
avant d'appelercreatePageViewController()
Mettre en œuvre la méthode de la sorte:
Et de définir votre
createPageViewController()
comme suitensuite dans vos deux délégué méthodes avant et après:
Et dans le comte de la méthode
En fait, vous pouvez remplir
controllers
avec une vue contrôleurs que vous souhaitez afficher, il suffit de leur classe comme PageItemController dans le storyboard (afin d'avoir de l'indice de la propriété).Ou vous pouvez définir chaque point de vue contrôleur comme c'est propre classe, et l'utilisation d'exécution propriété obtention et définition.
Utilisation
controller.valueForKey("itemIndex") as Int
avant et après la méthode au lieu decontroller.itemIndex
Utilisation
controller.setValue(i, forKey: "itemIndex")
au lieu decontroller.itemIndex = i
danspopulateControllersArray()
.Juste veiller à ce que chaque contrôleur de classe a de la
Int
propriétéitemIndex
, ou votre application plante.À mettre tous ensemble dans votre code, procédez de la manière suivante:
func viewControllerBefore ET func viewControllerAfter doit retourner les contrôleurs[contrôleur.itemIndex...]
merci 🙂 satanés fautes de frappe. Fixe
J'ai essayé de modifier votre réponse à inclure ces changements... l'enquête n'en dit pas 🙁
OriginalL'auteur Eric F.
Vous ne charge ViewControllers pour chaque page. chaque image que vous montrez est à l'intérieur de son propre ViewController. Ce qui est fait par le biais de:
si chaque page est la vôtre utilise la même mise en page, il n'y a rien à faire ici, à l'exception de la conception de cette ViewController dans Interface Builder.
Si, cependant, chaque page utilise une mise en page différente et présente les différentes données, vous devez d'abord prototype/conception de ces ViewControllers dans Interface Builder.
ensuite, vous créez des classes pour chaque ViewController et de les étendre à partir de PageItemController. Vous ne gardez que la variable index dans PageItemController et bouger le reste de votre logique pour les sous-classes.
par exemple un viewController qui contient une image
enfin, il suffit de changer votre
getItemController
fonction pour renvoyer le bon ViewController pour l'index spécifié. ici, vous pouvez soit passer des données à l'ViewController ou vous venez de le retourner.OriginalL'auteur ergoon
Ici est un grand repo pour cela:
https://github.com/goktugyil/EZSwipeController
OriginalL'auteur Esqarrouth
J'ai eu Eric Ferreira code ci-dessus pour travailler (Xcode 6.4). Je voulais utiliser une Page Vue-Contrôleur pour afficher les deux tout à fait unique contrôleurs avec des étiquettes qui affiche différentes données à partir d'un Domaine de base de données.
Je l'ai eu à travailler dans un projet de test où j'ai utilisé 2 storyboards, chacun contenant une seule étiquette qui est fixée par sa propre classe contenant la IBOutlet de l'étiquette et de réglage du code de l'étiquette de texte -- ce adéquatement simule la manière dont je suis l'affichage de mon Royaume données de base de données. Chaque scénario de la classe hérite de la PageItemController de manière à avoir le "itemIndex" variable disponible. Le PageItemController dans les virages hérite UIViewController achèvement de la chaîne d'héritage.
J'espère que cela aide quelqu'un qui cherche à usage unique, des story-boards.
OriginalL'auteur Delete My Account