Swift – Contrôle segmenté – Basculer plusieurs vues

Jusqu'à présent, je n'arrive toujours pas à comprendre comment changer plusieurs vues dans un controller de vue. Mon storyboard est comme celui-ci.

entrez la description de l'image ici

En ce moment je veux intégrer deux vues à l'intérieur de mon controller de vue.

entrez la description de l'image ici

Mon code pour le contrôle segmenté pour basculer deux vues dans un controller de vue jusqu'à présent.

import UIKit class PopularHistoryViewController: UIViewController { @IBOutlet weak var segmentedControl: UISegmentedControl! @IBAction func indexChanged(sender: UISegmentedControl) { switch segmentedControl.selectedSegmentIndex { case 0: NSLog("Popular selected") //show popular view case 1: NSLog("History selected") //show history view default: break; } } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } } 

Une autre chose, si je mets deux vues à l'intérieur de mon controller, quelle est la meilleure pratique pour le différencier?

Veuillez nous conseiller Je vous remercie.

Vous pouvez utiliser la propriété isHidden de l' UIView pour afficher / masquer les vues requirejses. Vous devez d'abord lier les deux vues à IBOutlets via le générateur Interface.

 @IBOutlet weak var historyView: UIView! @IBOutlet weak var popularView: UIView! @IBAction func indexChanged(_ sender: UISegmentedControl) { switch segmentedControl.selectedSegmentIndex { case 0: historyView.isHidden = true popularView.isHidden = false case 1: historyView.isHidden = false popularView.isHidden = true default: break; } } 

Note: il a été nommé hidden dans Swift 1 et 2.

Si vous voulez faire une layout de l'interface user dans Xcode pour les deux sous-vues qui se chevauchent, une meilleure solution consiste à utiliser deux UIContainerViewController et à utiliser la même méthode pour définir la propriété cachée comme suggéré dans la réponse ci-dessus.

entrez la description de l'image ici

Tout d'abord, créez deux sockets et raccordez le flexible aux vues de votre ViewController .

 @IBOutlet weak var firstView: UIView! @IBOutlet weak var secondView: UIView! 

Et changez le code comme:

 @IBAction func indexChanged(sender: UISegmentedControl) { switch segmentedControl.selectedSegmentIndex { case 0: firstView.hidden = false secondView.hidden = true case 1: firstView.hidden = true secondView.hidden = false default: break; } } 

Si vous ne souhaitez pas créer de points de vente, affectez les points de vue individuels (Dites 101 et 102 ) et vous pouvez le faire comme ceci:

 @IBAction func indexChanged(sender: UISegmentedControl) { switch segmentedControl.selectedSegmentIndex { case 0: self.view.viewWithTag(101)?.hidden = false self.view.viewWithTag(102)?.hidden = true case 1: self.view.viewWithTag(101)?.hidden = true self.view.viewWithTag(102)?.hidden = false default: break; } } 

Ajoutez les deux vues au controller de vue dans le storyboard et définissez l'une d'entre elles pour être masquée = yes ou alpha = 0. Lorsque votre fonction change d'index est appelée, définissez la vue actuelle sur hidden = yes / alpha de 0 et définissez hidden hidden = no / alpha = 1. Cela devrait atteindre ce que vous voulez.

@IBAction func acSegmentAction (_ sender: Any) {

  switch acSegmentedControl.selectedSegmentIndex { case 0: // print("addressview selected") addressView.isHidden = false contactProviderView.isHidden = true case 1: //print("contact provider selected") addressView.isHidden = true contactProviderView.isHidden = false default: break; } } 

Mises à jour XCODE 8.3.2

Voici la syntaxe mise à jour pour xcode 8.3.2

Les vues de conteneur fonctionnent comme des petits controllers de vue.