Comment puis-je utiliser un UISegmentedControl pour changer de vue?
Je suis à essayer de comprendre comment utiliser les différents états d'un UISegmentedControl pour changer de vue, de la même manière qu'Apple sur l'App Store quand switiching entre "Top payant" et " Top Gratuit.
Vous devez vous connecter pour publier un commentaire.
L'approche la plus simple est d'avoir deux points de vue que vous pouvez activer leur visibilité à indiquer le point de vue a été sélectionné. Voici un exemple de code sur la façon dont il peut être fait, certainement pas un moyen optimisé pour gérer les points de vue, mais juste pour montrer comment vous pouvez utiliser la UISegmentControl pour basculer l'affichage visible:
Vous pouvez bien sûr encore re-facteur le code pour afficher/masquer la vue de droite.
Dans mon cas, mon point de vue assez complexe et je ne peux pas il suffit de changer la propriété hidden de différents points de vue parce que cela prendrait trop de mémoire.
J'ai essayé plusieurs solutions et non d'entre eux ont travaillé pour moi, ou réalisées de manière erratique, spécialement avec la titleView de la barre de navigation pas toujours montrant la segmentedControl lors de la poussée/vues surgissent.
J'ai trouvé ce billet de blog sur la question qui vous explique comment faire de la bonne façon. Il semble qu'il a eu l'aide d'ingénieurs Apple lors de la WWDC'2010 à venir avec cette solution.
http://redartisan.com/2010/6/27/uisegmented-control-view-switching-revisited
La solution de ce lien est de loin la meilleure solution que j'ai trouvé sur la question jusqu'à présent. Avec un peu d'ajustement, il a également travaillé très bien avec un tabBar au bas
UINavigationController
. Imaginez que vous avez unUISegmentedControl
placés à la verticale au milieu de la vue. Le point de vue contrôlé par leUISegmentedControl
sont placés en dessous. Le problème se pose lorsque l'un de ces enfants vue d'effectuer un segue. Vous êtes (au moins j'étais) pas en mesure de faire la transition de la vue racine (celui qui contient leUISegmentedControl
) pour le contrôleur de destination, la vue est placée au-dessous. Si quelqu'un connait une solution pour cela, j'aimerais entendre! @crafterm, tous les indicateurs?navigationController
de transition. Avec enchaîne, vous devez modifier l'original segue: lien le parent VC avec la destination de VC, et appeler les parentsperformSegueWithIdentifier
. Laid, mais il fonctionne. Une meilleure solution, je crois, serait mise en Œuvre d'un Conteneur View Controller. N'ai pas encore testé, mais vous tiendrons au courant.Ou si ses une table, vous pouvez recharger la table et dans cellForRowAtIndex, remplir le tableau à partir de différentes sources de données basées sur le segment de l'option sélectionnée.
Une idée est d'avoir le point de vue avec la segmentation des contrôles ont un conteneur de vue que vous remplissez avec les différents sous-vues (ajouter qu'un seul sous-vue du conteneur de vue lorsque les segments sont basculés). Vous pouvez même avoir séparé la vue des contrôleurs pour ceux des sous-vues, si vous avez à l'avant sur les méthodes comme "viewWillAppear" et "viewWillDisappear" si vous avez besoin d'eux (et ils devront être dit quoi manette de navigation, ils sont sous).
Généralement ça fonctionne assez bien, parce que vous pouvez mettre hors de la vue principale avec le récipient dans de l'IB, et les sous-vues va remplir tout l'espace du conteneur leur permet d'avoir (assurez-vous que votre autoresize masques sont mis en place correctement).
Essayer ce code, vous permet de basculer entre les différentes Vues sur l'évolution des segments du Segment de Contrôle
Ouvrir des Vues Différentes sur la sélection des différents segments de UISegmentControl
Essayez d'utiliser
SNFSegmentedViewController
, un open-source de composant qui fait exactement ce que vous cherchez avec une installation commeUITabBarController
.À partir de la réponse de @Ronnie Liew, j'ai créer cette:
Attribuer .H en
Déclarer .M
Swift version:
Le parent-vue-contrôleur est responsable de la définition de la taille et de la position de la vue de chaque enfant-vue-contrôleur. Le point de vue de l'enfant-vue-contrôleur devient une partie de la vue parent du contrôleur de vue de la hiérarchie.
Définir paresseux propriétés:
Afficher/Masquer La Vue Enfant Contrôleurs:
Gérer SegmentedControl tapEvent
Et bien sûr, vous êtes en mesure d'utiliser au sein de votre enfant-vue-contrôleur les classes:
De référence:
https://cocoacasts.com/managing-view-controllers-with-container-view-controllers/
Un rapide Swift Version: