2017-08-08 8 views
0

1つのビューコントローラに2つのテキストラベルがあり、ラベルのテキストを別のView Controllerの対応するUIButtonsとUILabelsに接続したいとします。なぜデータがビューコントローラ間を通過しないのですか? Swift 3

「thisUploadPhoto」ボタンを押すと、ただ1つの画面ではなく、次の画面の2つの画面が読み込まれます。もしあなたがそれを私に助けてくれたら、それはすばらしいことでしょう。私はPhotoLabelViewControllerで行われ、キャンセルボタンを押したときにも、それは私に、このエラーを与える:

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

「行って」を印刷することになっているとき、私はISN以下、なぜ私のコードを知りません」 2つのView Controllerを一緒に接続する作業。

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

「ストーリーボード」で画像を追加できますか?それがどのように配線されているか知ることは有益でしょう。 –

答えて

1

「完了」ボタンをPhotoShareLabelViewControllerdidTapDoneと呼ばれるメソッドを呼び出すためにストーリーボードから配線されています。ただし、didTapDoneメソッドはPhotoShareViewControllerに実装されています。それは別のView Controllerです。

これを修正するには、メソッド実装を正しいView Controllerに配置します。次に、ストーリーボードの「完了」ボタンを選択し、「接続インスペクタ」(下の図を参照)に移動し、現在の間違った接続を削除します。次に、適切なビューコントローラ内の正しいdidTapDoneメソッドに配線します。

example method wiring

関連する問題