Comment passez-vous les données entre les contrôleurs de vue dans Swift?
J'ai essayé de créer des variables globales et de la mise à jour de l'information lorsque la vue est chargé, mais les données ne sont pas rendues.
VARIABLES GLOBALES
var viewName:String = ""
var viewDuration:String = ""
var viewPeriod:String = ""
var viewMinAmp:String = ""
var viewMaxAmp:String = ""
var viewStep:String = ""
var viewType:String = ""
Est-il un moyen plus efficace de la transmission de l'information autre que d'avoir des variables globales?
@IBOutlet var txtName: UITextField!
@IBOutlet var txtDuration: UITextField!
@IBOutlet var txtPeriod: UITextField!
@IBOutlet var txtMinAmp: UITextField!
@IBOutlet var txtMaxAmp: UITextField!
@IBOutlet var txtStep: UITextField!
@IBOutlet var txtType: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
//Do any additional setup after loading the view, typically from a nib.
setInfo(viewName, duration: viewDuration, period: viewPeriod, minAmp: viewMinAmp, maxAmp: viewMaxAmp, step: viewStep, type: viewType)
}
func setInfo(name: String, duration: String, period: String, minAmp: String, maxAmp: String, step: String, type: String) {
txtName.text = name
txtDuration.text = duration
txtPeriod.text = period
txtMinAmp.text = minAmp
txtMaxAmp.text = maxAmp
txtStep.text = step
txtType.text = type
}
source d'informationauteur Tomasero
Vous devez vous connecter pour publier un commentaire.
Une solution serait de remplacer prepareForSegue(segue:expéditeur:) à partir de la vue-contrôleur qui contient les données que vous souhaitez passer à la vue de destination du contrôleur.
Pour Swift 3.0
Pour définir
stringValue
pour obtenir
stringValue
Pour Swift version ci-dessous 3.0
Vous pouvez transmettre des données entre des points de vue à l'aide de classe singleton. Il est facile et efficace. Voici ma classe ShareData.swift
Maintenant dans mon
ViewControllerOne
je peux le mettre au-dessus de variable.Et dans mon
ViewControllerTwo
je peux accéder àsomeString
commePersonnellement, je préfère façons comme suit:
Si vous voulez sauter entre deux contrôleurs (de A à B),- pushViewController:animation: dans la navigation, vous pouvez définir une propriété du modèle de Contrôleur de B et de l'exposer publiquement, puis définir explicitement cette propriété avant de sauter à partir du Contrôleur de Un, c'est assez simple;
Dans le cas où vous voulez sauter vers l'arrière à partir du Contrôleur de B à A, utilisez Délégué+mode de Protocole. Contrôleur B rédige un public de protocole et un "délégué" de la propriété, tout objet qui voudrait être le délégué du Contrôleur B se doit de respecter et de mettre en œuvre son protocole(en option). puis avant le saut vers l'arrière, Contrôleur de B fait son délégué effectuer une certaine action(s) figurant dans le protocole, les données pourraient être transférés de cette manière;
Dans certaines circonstances, vous pouvez transférer des données à partir d'un Contrôleur(ou contrôleurs) à d'autres Contrôleurs multiples, utiliser le mécanisme de Notification si c'est le cas.
Apple a des instructions détaillées sur la délégué mode de, mode de notification dans la documentation officielle, les vérifier dans XCode, 🙂
Suffit de suivre 3 étapes, supposons que vous souhaitez transmettre des données à partir de ViewControllerA à ViewControllerB:
prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)
à ViewControllerAPour l'étape#3,:
pour les personnes qui sont à l'aide de swift 2.1ou qui se erreur "Ne peut pas convertir une valeur de type 'UIViewController' de type spécifié 'votre point de vue Contrôleur nom de la classe', Après @Scott Mielcarski 's réponse à cette questionVeuillez utiliser:
let destinationVC:ViewControllerClass = segue.destinationViewController as! ViewControllerClass
au lieu delet destinationVC:ViewControllerClass = segue.destinationViewController
C'est testé sur Swift 2.1.1 et cela fonctionne pour moi.