2017-07-13 1 views
0

J'ai ViewController, qui a un champ de texte et un bouton. L'utilisateur entre son nom dans le champ de texte et appuie sur le bouton DONE. Quand il appuie sur le bouton, il est associé à GifteeDetails, qui est un contrôleur de vue différent. Il y a une étiquette dans ce viewController qui est censé afficher son nom. Mais, son nom ne s'affiche pas. Je ne reçois pas d'erreurTransférer des données TextField entre ViewControllers

Voilà ViewController:

@IBOutlet weak var textGifteeName: UITextField! 
@IBAction func toDetails(_ sender: Any) { 
    performSegue(withIdentifier: "toDetails", sender: nil) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let destDetails: GifteeDetails = segue.destination as! GifteeDetails 
    destDetails.nametext = textGifteeName.text! 
    destDetails.agetext = "\(Int(age)! - 2000 + 17)" 
    destDetails.locationstext = labelGifteeLocationsPreview.text! 
    destDetails.intereststext = labelGifteeInterestsPreview.text! 
} 

Voilà GifteeDetails:

var nametext = String() 
var agetext = String() 
var locationstext = String() 
var intereststext = String() 

@IBOutlet weak var labelGifteeName: UILabel! 
@IBOutlet weak var labelGifteeAge: UILabel! 
@IBOutlet weak var labelGifteeLocations: UILabel! 
@IBOutlet weak var labelGifteeInterests: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    nametext = labelGifteeName.text! 
    agetext = labelGifteeAge.text! 
    locationstext = labelGifteeLocations.text! 
    intereststext = labelGifteeInterests.text! 
} 

Désolé tout le!. Swift me donne une erreur à moins que je ne les ai.

+0

Le problème est que vous le font dans le sens inverse. Pour définir votre propriété de texte textfield dans votre méthode viewDidLoad GifteeDetails changez 'nametext = labelGifteeName.text!' En 'labelGifteeName.text = nametext', changez' agetext = labelGifteeAge.text! 'En' labelGifteeAge.text = agetext' et ainsi de suite –

Répondre

0

Vous mettez à jour les chaînes nametext et d'autres, qui ne sont pas connectées à vos étiquettes.

Vous devez remplacer ce morceau de code:

destDetails.nametext = textGifteeName.text! 
destDetails.agetext = "\(Int(age)! - 2000 + 17)" 
destDetails.locationstext = labelGifteeLocationsPreview.text! 
destDetails.intereststext = labelGifteeInterestsPreview.text! 

Avec:

destDetails.labelGifteeName.text = textGifteeName.text! 
destDetails.labelGifteeAge.text = "\(Int(age)! - 2000 + 17)" 
destDetails.labelGifteeLocations.text = labelGifteeLocationsPreview.text! 
destDetails. labelGifteeInterests.text = labelGifteeInterestsPreview.text! 

nametext est un objet String, et il est différent de labelGifteeName.text qui est le String de l'étiquette que vous voulez mettre à jour.

+0

Je vous remercie! Ça a marché. – Sarah

+0

De rien! –

0

Si vous utilisez segue, puis supprimez-le, puis créez une méthode d'action de ce bouton dans FirstviewController et utilisez pushViewController pour vous déplacer sur SecondviewController.

Swift 3 Exemple:

@IBAction func toDetails(_ sender: Any) 
{ 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewController(withIdentifier: "SecondView") as! SecondView 

    UserDefaults.standard.set(self. textGifteeName.text, forKey: "savedStringKey") 
    UserDefaults.standard.synchronize() 
    self.navigationController?.pushViewController(vc, 
              animated: true) 
} 

En SecondView:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.labelGifteeName.text = UserDefaults.standard.string(forKey: "savedStringKey")! 
} 
0

S'il vous plaît mettre à jour votre méthode func viewDidLoad() dans GifteeDetailsVC avec labelGifteeName.text! = Nametext, labelGifteeAge.text! = Agetext au lieu de votre code parce que vous avez déjà attribué la valeur pour les chaînes iE, nametext et agetext à ViewController, vous devez afficher la valeur de chaîne dans l'étiquette