Xcode/Swiftでプログラミングするのは初めてですが、小さな問題に直面しています。2人のViewControllersの間で情報を渡すときに代理人は常に0ではありません
デリゲートを使用し、segueを使用せずに、ViewControllerから2番目のViewControllerに情報を送信したいとします。私はそれについて多くを読んで、最も一般的なソリューションがViewDidLoadで "インスタンス" .delegate = selfを使用していることがわかりましたが、それは私のためにはうまくいきません。
- アプリケーションの定義 -
これはかなり簡単です。最初のViewControllerにはボタンとラベルがあります。ボタンは、2番目のViewControllerを開きます。このViewControllerには、textFieldとButtonがあります。 Buttonは、最初のViewControllerにtextFieldの内容を送信してLabelを更新します。
- コード -
これは最初のViewControllerのためのコードです:
class ViewController: UIViewController, clickedButtonDelegate {
@IBOutlet weak var Label: UILabel!
func didClickedButton(text: String) {
Label.text = text
}
var secondView = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondView.delegate = self
}
}
これが第二のViewControllerのためのコードです:
何も起こりません。このコードを使用してprotocol clickedButtonDelegate {
func didClickedButton(text: String)
}
class SecondViewController: UIViewController {
@IBOutlet weak var introducedText: UITextField!
var delegate : clickedButtonDelegate!
@IBAction func sendData(_ sender: Any) {
if delegate != nil {
let information:String = introducedText.text!
delegate!.didClickedButton(text: information)
dismiss(animated: true, completion: nil)
self.navigationController?.popViewController(animated: true)
}
}
}
デリゲートはSecondViewControllerでは常にnilであるためです。
助けてください。
ありがとうございます!
いつ、どのようにSecondViewControllerをプッシュしますか?そのコードを提供してください。 –
次の行: 'var secondView = SecondViewController()'は、 'SecondViewController'のインスタンスをいくつか作成しています。 ** this **インスタンスに接続していますか?または、ストーリーボードのセグを使って 'SecondViewController'に到達しますか?その場合、**インスタンスへのポインタを作成し、 'var secondView = SecondViewController()'を避けなければなりません。 – Honey
[この回答を見る](https://stackoverflow.com/a/31934786/) 5175709)とそれがリンクしているビデオ – Honey