Comment mettre de la UIPageControl élément sur le dessus de la sole de glissement des pages dans un UIPageViewController?
Quant à ce tutoriel par AppCoda sur la façon de mettre en œuvre une application avec UIPageViewController je voudrais utiliser une page personnalisée à l'élément de contrôle en haut des pages au lieu d'en bas.
Quand je viens de mettre une page de l'élément de commande sur le dessus de la seule vue qui sera affiché, la conséquence logique est que les éléments de contrôle défile avec la page de visualisation de l'écran.
Comment est-il possible de mettre l'élément de commande sur le dessus de la vue pour que la page points de vue sont en plein écran (comme une image) de sorte que l'utilisateur peut voir les points de vue sous la fixe à l'élément de contrôle?
Je joint un exemple de capture d'écran - les crédits à AppCoda et le Chemin d'accès:
Vous devez vous connecter pour publier un commentaire.
Je n'avais pas la rep à commenter la réponse que l'origine de cela, mais je l'aime vraiment. J'ai amélioré le code et l'a converti à swift pour ci-dessous sous-classe de UIPageViewController:
Propre et il fonctionne bien. Pas besoin de gérer quoi que ce soit, juste faire de votre page view controller une instance de cette classe dans la table de montage séquentiel, ou faire votre mise en page personnalisée-vue-contrôleur de classe héritent de cette classe à la place.
Après un complément d'enquête et de recherche J'ai trouvé une solution, également sur stackoverflow.
La clé est le suivant message à envoyer à un personnalisé
UIPageControl
élément:Le AppCoda tutoriel est le fondement de cette solution:
Ajouter un
UIPageControl
élément sur le dessus de laRootViewController
- la-vue-contrôleur avec la flèche.Créer un liés
IBOutlet
élément dans votreViewController.m
.Dans le
viewDidLoad
méthode vous devez ensuite ajouter le code suivant sur la dernière méthode que vous appelez après l'ajout de tous les sous-vues.À attribuer la page actuelle basée sur la pageIndex du contenu en cours d'affichage vous pouvez ajouter le texte suivant à la
UIPageViewControllerDataSource
méthodes:self.pageControl
est par exemple un IBOutlet à la Page de l'élément de Contrôle sur la vue...pageControl
dans la source de données les méthodes ne doivent pas être recommandé. Comme un datasouce, la seule chose que vous devez faire est de retourner les données demandées (et d'éviter d'autres logiques) - vous n'avez aucun contrôle sur quand ces méthodes seront appelées à la mise en œuvre. Par exemple, après un défilement vous peut observer les PageViewController 'pré-chargement" la prochaine voisins de la page à l'avance. Ce totalement mess avec tout checky logique de vous peut se faufiler dans (et qui explique sans doute pourquoi @Gokul obtient un résultat différent à @sn3ek). (Mieux: utilisez le délégué à la place)sn3ek Votre réponse m'a fait le plus de la façon dont il. Je n'ai pas mis la page en cours à l'aide de la
viewControllerCreation
méthodes bien.J'ai fait mon
ViewController also
le délégué de laUIPageViewController
. Puis j'ai mis lePageControl
'sCurrentPage
dans la méthode. À l'aide de lapageIndex
maintenu je suis leContentViewController
mentionner dans l'article original.n'oubliez pas de l'ajouter à
viewDidLoad
À suivre sur les PropellerHead le commentaire de l'interface pour la
ViewController
sera de la forme@interface ViewController : UIViewController <UIPageViewControllerDataSource, UIPageViewControllerDelegate>
Le même effet peut être obtenu simplement en sous-classement UIPageViewController et dominante viewDidLayoutSubviews comme suit:
Il n'est pas nécessaire de maintenir une salle de UIPageControl et ces.
Ici est un RxSwift/RxCocoa réponse j'ai mis en place après regarder les autres réponses.
Vous avez à mettre en œuvre une coutume
UIPageControl
et l'ajouter à la vue. Comme d'autres l'ont mentionné,view.bringSubviewToFront(pageControl)
doit être appelée.J'ai un exemple de vue contrôleur avec tout le code sur la création d'un custom
UIPageControl
(dans le scénario) avecUIPageViewController
Il y a 2 méthodes dont vous avez besoin pour mettre en œuvre pour définir la page actuelle de l'indicateur.
Voici la Swifty 2 réponse très largement basé sur @zerotool la réponse ci-dessus. Juste sous-classe UIPageViewController puis ajouter cette substitution de trouver le scrollview et le redimensionner. Prenez ensuite le contrôle de page et le déplacer vers le haut de tout le reste. Vous devez également définir les champs d'une page couleur d'arrière-plan clair. Ces deux dernières lignes pourraient aller dans votre délégué d'application.
btw - je ne suis pas remarquer de boucle infinie, comme mentionné ci-dessus.