Jusqu'à présent, je n'arrive toujours pas à comprendre comment changer plusieurs vues dans un controller de vue. Mon storyboard est comme celui-ci.
En ce moment je veux intégrer deux vues à l'intérieur de mon controller de vue.
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.
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.