2017-05-24 8 views
0

あるVC(別のVC)から別のVC(firstVC)にテキスト値を渡そうとしています。 secondVCの情報は、firstVCのテキストフィールドのテキスト値を指定します。私はこれを理解するためにドキュメントを使ってみましたが、私は非常に混乱しているか、何か他のものが上がっているにちがいありません。私secondVCでSwift 3.0 Segueを使用してView Controller間で情報を渡す

:予想通りfirstVCに戻っsegueing後

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if(segue.identifier == "saveSegue") { 

     let destinationVC = segue.destination as! firstVC 

     destinationVC.addressTextField.text = searchBar.text 
    } 
} 


@IBAction func savePressed(_ sender: Any) { 


    performSegue(withIdentifier: "saveSegue", sender: self) 
} 

は、テキストフィールドは、検索バーのテキストを記入されていません。 (searchBarテキストはnilではありません)私の理解から、ボタンがsecondVCで選択され、performSegueを呼び出すと、prepareForSegueを呼び出してaddressTextField.text値を設定してfirstVCに戻ります。私の論理が正しいかどうかはわかりません。あなたのsecondViewController

var searchedText = "" 


@IBAction func savePressed(_ sender: Any) { 
    performSegue(withIdentifier: "saveSegue", sender: self) 
} 

であなたのFirstViewController

@IBAction func dismissSearchVC(_ sender: UIStoryboardSegue) { 
     let sourceVC = sender.source as! viewController2 
     addressTextField.text = sourceVC.searchBar.text 
} 

+0

navigationControllerを使用していますか?実際にnavigateControllerスタックから 'secondVC'をポップするだけでなく、' firstVC'にセグメンテーションしていますか? 'prepareForSegue'にブレークポイントをドロップし、実際に呼び出されているかどうかを確認してください。 – toddg

+0

私はnavigationControllerを使用していません - ストーリーボードのみを使用します。私はprepareForSegueにブレークポイントを置いて、呼び出されませんでした。これら2つは関連していますか? – Kevin

+2

一般に、前のviewControllerに戻るときは、実際にはsegueを実行していません。モーダルビューセグを閉じるか、viewControllerスタックからビューをポップするかのいずれかです(navigationControllerを使用している場合)。データの受け渡しはもう少し複雑で、これを行うための推奨方法は代理人によるものです。良い情報[ここ](https://medium.com/ios-os-x-development/pass-data-with-delegation-in-swift-86f6bc5d0894) – toddg

答えて

1

今トップに出るとsaveSegueとしてそのセグエに識別子を追加するために、あなたのViewControllerを接続し、

ドロップダウンからdismissSearchVCを選択

enter image description here

その後、

enter image description here

今「DismissSearchVCにアンワインドセグエ」を選択し、属性インスペクタに識別子を追加し、ここで enter image description here

からあなたのセグエを選択...

+1

私のprepareForSegueは呼び出されていないので、これは動作しません。 – Kevin

+2

実際にポップしたり、viewControllerを閉じたりしていません。 その答えを編集します。 –

+0

addressTextFieldはfirstViewControllerにあります。 2番目のViewController viewDidLoad、addressTextField.text = searchedTextはエラーを生成します – Kevin

0

私は1つのビューコントローラから別のへの移行を疑いますビューコントローラはsegueのために起こっていませんが、ボタンの接続のために起こっています。

からAnotherViewControllerに接続したsegueを削除してください。

ViewControllerを含むボタンからsegueAnotherViewControllerに追加します。 (UIButtonからAnotherViewControllerではなく、ViewControllerからAnotherViewControllerまで)。それにsegueあなたの期待している識別子を与えてください。

関連する問題