Est-il possible de tourner la page par programmation UIPageViewController
?
ios
ios5
uikit
uipageviewcontroller
RAGOPOR
la source
la source
Réponses:
Oui c'est possible avec la méthode:
C'est la même méthode utilisée pour configurer le premier contrôleur de vue sur la page. Similaire, vous pouvez l'utiliser pour accéder à d'autres pages.
Je
viewControllers
me demande pourquoi un tableau et pas un contrôleur de vue unique?C'est parce qu'un contrôleur de vue de page peut avoir une «colonne vertébrale» (comme dans iBooks), affichant 2 pages de contenu à la fois. Si vous affichez 1 page de contenu à la fois, passez simplement dans un tableau à 1 élément.
Un exemple dans Swift:
la source
Étant donné que j'en avais également besoin, j'entrerai plus en détail sur la façon de procéder.
Remarque: je suppose que vous avez utilisé le formulaire de modèle standard pour générer votre
UIPageViewController
structure - qui a à la fois lemodelViewController
etdataViewController
créé lorsque vous l'appelez. Si vous ne comprenez pas ce que j'ai écrit, revenez en arrière et créez un nouveau projet qui utilise leUIPageViewController
comme base. Vous comprendrez alors.Ainsi, avoir besoin de retourner à une page particulière implique de configurer les différents éléments de la méthode énumérés ci-dessus. Pour cet exercice, je suppose qu'il s'agit d'une vue de paysage avec deux vues affichées. De plus, j'ai implémenté cela en tant qu'IBAction afin que cela puisse être fait en appuyant sur un bouton ou non - il est tout aussi facile de faire appel au sélecteur et de transmettre les éléments nécessaires.
Donc, pour cet exemple, vous avez besoin des deux contrôleurs de vue qui seront affichés - et éventuellement, que vous progressiez dans le livre ou que vous reculiez.
Notez que j'ai simplement codé en dur où aller aux pages 4 et 5 et utiliser un feuillet avant. De là, vous pouvez voir que tout ce que vous avez à faire est de passer les variables qui vous aideront à obtenir ces éléments ...
la source
Voici un autre exemple de code pour une vue paginée unique. L'implémentation de viewControllerAtIndex est omise ici, elle doit renvoyer le contrôleur de vue correct pour l'index donné.
Les pages peuvent être modifiées en appelant
la source
Je pourrais totalement manquer quelque chose ici, mais cette solution semble beaucoup plus simple que beaucoup d'autres proposées.
la source
Ce code a bien fonctionné pour moi, merci.
C'est ce que j'ai fait avec. Certaines méthodes pour avancer ou reculer et une pour accéder directement à une page particulière. C'est pour un document de 6 pages en mode portrait. Cela fonctionnera bien si vous le collez dans l'implémentation du RootController du modèle pageViewController.
la source
Swift 4:
J'avais besoin d'aller au contrôleur suivant lorsque j'appuie sur le prochain contrôleur de vue pagecontroller et que je mets également à jour l'index de pageControl, donc c'était la solution la meilleure et la plus simple pour moi :
la source
Qu'en est-il de l'utilisation des méthodes de dataSource?
Analogiquement pour en arrière.
la source
Dans Swift :
la source
Cependant, l'utilisation de cet appel de méthode 'self.pageViewController setViewControllers' n'appelle pas 'viewDidDissapear' sur le viewController pour la page qui a été refusée, tandis que la rotation manuelle d'une page appelle viewDidDissapear sur la page refusée. Je crois que c'est la cause de mon crash
"Le nombre de contrôleurs de vue fournis (0) ne correspond pas au nombre requis (1) pour la transition demandée"
la source
J'avais également besoin d'un bouton pour naviguer à gauche sur un PageViewController, qui devrait faire exactement ce que vous attendez du mouvement de balayage.
Étant donné que j'avais déjà quelques règles en place dans " pageViewController: viewControllerBeforeViewController " pour gérer la navigation naturelle par balayage, je voulais que le bouton réutilise tout ce code et je ne pouvais tout simplement pas me permettre d'utiliser des index spécifiques pour atteindre des pages comme le précédent réponses ont fait. Donc, j'ai dû prendre une solution alternative.
Veuillez noter que le code suivant est pour un contrôleur d'affichage de page qui est une propriété dans mon ViewController personnalisé et dont la colonne vertébrale est définie sur mi.
Voici le code que j'ai écrit pour mon bouton Naviguer à gauche:
Vous pouvez faire quelque chose de très similaire pour créer un bon bouton de navigation à partir d'ici.
la source
Dans le cas où le CONTRÔLE DE PAGE pour indiquer la page actuelle est O && Vous voulez que les pages naviguent par défilement et également en cliquant sur les boutons personnalisés dans Page ViewController, ci-dessous peut être utile.
// Délégué appelé viewControllerAfterViewController lorsque l'utilisateur passe à la page suivante
}
}
// Logique du bouton personnalisé (précédent et suivant)
}
}
la source
// appelle maintenant cette méthode
[self moveToPage];
J'espère que ca fonctionne :)
la source
Pour une seule page, je viens de modifier la réponse de @Jack Humphries
la source
Comme l'a souligné @samwize, la façon de paginer consiste à utiliser
Voici comment je l'ai fait: ma source de données et le délégué sont séparés. Vous pouvez appeler cette méthode et modifier uniquement la vue "suivante". Auparavant, vous devez appliquer les règles de pagination. Autrement dit, vous devez vérifier la direction et le contrôleur suivant. Si vous utilisez cette méthode avec votre source de données personnalisée, le tableau de contrôleurs que vous affichez ne changera pas (puisque vous utiliserez un tableau personnalisé sur une sous-classe NSObject).
En utilisant votre propre source de données, la méthode définit simplement une nouvelle vue (avec une direction spécifique). Puisque vous contrôlerez toujours les pages qui s'afficheront lorsque vous les balayez normalement.
la source
Je travaille dessus depuis hier et je l'ai finalement fait fonctionner. Je ne pouvais pas utiliser totalement le modèle standard, car j'ai trois viewControllers différents en tant que childviews:
J'avais besoin d'un bouton de déclenchement uniquement dans le premier VC, j'ai donc ajouté une propriété pour pageViewController et model:
J'ai réécrit la méthode init du modèle pour passer le storyboard et la pageViewController en tant que paramètres, afin que je puisse les définir sur mon VC1:
Enfin, j'ai ajouté une IBAction dans mon vc1 pour déclencher la méthode pageViewController setViewControllers: direction: animated: completion ::
Remarque Je n'ai pas besoin de trouver les index des VC, mon bouton m'amène à mon deuxième VC, mais ce n'est pas difficile d'obtenir tous les index et de garder une trace de vos enfants:
J'espère que ça t'aide!
la source
Voici une solution utilisant les méthodes UIPageViewControllerDataSource :
Le code effectue le suivi du contrôleur de vue affiché actuel dans UIPageViewController .
Initialisez d'abord currentViewController avec le contrôleur de vue initial défini pour UIPageViewController .
Ensuite , garder une trace de currentViewController dans les UIPageViewControllerDelegate méthodes: pageViewController: willTransitionToViewControllers: et pageViewController: didFinishAnimating: previousViewControllers: transitionCompleted: .
Enfin, dans la méthode de votre choix (dans l'exemple ci - dessous de - (IBAction) OnNext: (id) expéditeur ), vous pouvez programmation passer au contrôleur suivant ou précédent en utilisant UIPageViewControllerDataSouce méthodes pageViewController: viewControllerBeforeViewController: , pageViewController: viewControllerAfterViewController: pour obtenir le contrôleur de vue suivant ou précédent et accédez-y en appelant [self.pageViewController setViewControllers: @ [vc] direction: UIPageViewControllerNavigationDirectionForward animé: OUI achèvement: nil];
la source
Comme les ViewControllers sont intégrés dans PageViewController, tout ce que vous avez à faire est de:
Exemple dans Xamarin, mais fonctionnellement similaire à Swift, etc. Le code suivant serait dans le délégué Button Click dans l'un des ViewControllers affiché sous forme de page:
la source