2017-08-08 4 views
0

J'ai 2 étiquettes de texte sur un contrôleur de vue et je veux connecter le texte des étiquettes aux UIButtons et UILabels correspondants sur un autre View Controller. Maintenant, lorsque j'appuie sur le bouton "thisUploadPhoto", il charge 2 écrans de l'écran suivant, au lieu d'un seul écran. Si vous pouviez m'aider avec ça, ce serait génial. Aussi, quand je presse les faits et annuler les boutons sur le PhotoLabelViewController il me donne cette erreur:Pourquoi les données ne passent-elles pas entre les contrôleurs de vue? Swift 3

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[tot.PhotoShareLabelViewController didTapDone:]: unrecognized selector sent to instance 0x7f8cecf5d0b0'

Quand il est censé imprimer « fait »

Je ne sais pas pourquoi mon code ci-dessous ISN » t travaillant sur la connexion des 2 contrôleurs de vue ensemble.

import UIKit 

class PhotoShareViewController: UIViewController { 
    @IBOutlet weak var imageView: UIImageView! 
    @IBOutlet weak var contentTextView: UITextView! 

    @IBOutlet weak var thatTextField: UITextField! 
    @IBOutlet weak var thisTextField: UITextField! 
    var presenter: PhotoShareModuleInterface! 
    var image: UIImage! 

    @IBAction func thisUploadPhoto(_ sender: Any) { 
     if thisTextField.text != "" && thatTextField.text != "" 
     { 
      performSegue(withIdentifier: "segue", sender: self) 
     } 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     var photoShareLabelViewController = segue.destination as! PhotoShareLabelViewController 
     photoShareLabelViewController.thisString = thisTextField.text! 
     photoShareLabelViewController.thatString = thatTextField.text! 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

     imageView.image = image 
    } 

    override var prefersStatusBarHidden: Bool { 
     return true 
    } 

    @IBAction func didTapCancel(_ sender: AnyObject) { 
     presenter.cancel() 
     presenter.pop() 
    } 

    @IBAction func didTapDone(_ sender: AnyObject) { 
     guard let message = thatTextField.text, !message.isEmpty else { 
      return 
     } 
     guard let messageOne = thisTextField.text, !messageOne.isEmpty else { 
      return 
     } 

     presenter.finish(with: image, content:message) 
     presenter.dismiss() 
    } 
} 

extension PhotoShareViewController: PhotoShareViewInterface { 
    var controller: UIViewController? { 
     return self 
    } 
} 

import UIKit 

class PhotoShareLabelViewController: UIViewController { 
    @IBOutlet weak var thisLabel: UILabel! 
    @IBOutlet weak var thatLabel: UILabel! 
    @IBOutlet weak var thisButton: UIButton! 
    @IBOutlet weak var thatButton: UIButton! 

    var thisCounter = 0 
    var thatCounter = 0 
    var presenter: PhotoShareModuleInterface! 
    var image: UIImage! 

    @IBAction func pressedThisButton(_ sender: Any) { 
     thisCounter += 1 

     print(thisCounter) 
    } 

    @IBAction func pressedThatButton(_ sender: Any) { 
     thatCounter += 1 

     print(thatCounter) 
    } 

    var thisString = String() 
    var thatString = String() 

    @IBAction func pressedButtonDone(_ sender: Any) { 
     print("done") 
    } 

    @IBAction func pressedButtonCancel(_ sender: Any) { 
     print("cancel") 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     thisLabel.text = thisString 
     thisButton.setTitle(thisString, for: UIControlState.normal) 
     thatLabel.text = thatString 
     thatButton.setTitle(thatString, for: UIControlState.normal) 
    } 

} 
+0

Pourriez-vous s'il vous plaît ajouter une image avec votre 'storyboard'? Il serait utile de savoir comment ça fonctionne. –

Répondre

1

Le bouton « Terminé » est câblé de storyboard pour appeler une méthode appelée didTapDone dans PhotoShareLabelViewController. Toutefois, votre méthode didTapDone est implémentée dans PhotoShareViewController. C'est un contrôleur de vue différent.

Pour résoudre ce problème, placez l'implémentation de la méthode dans le bon contrôleur de vue. Ensuite, sélectionnez votre bouton "Terminé" dans le Storyboard et allez dans son "Inspecteur des Connexions" [voir image ci-dessous] et supprimez sa mauvaise connexion actuelle. Ensuite, connectez-le à la méthode correcte didTapDone dans le contrôleur de vue correct.

example method wiring