2017-01-19 10 views
0

私は2つのView Controller、HomeViewController、およびSecondViewControllerを持っています。これは、スタックの先頭のHomeViewControllerの上にプッシュされます。私はHomeVCからSecondVCまで「ショー」によってセグを持っています。私はSecondVCからHomeVCに情報を渡す方法を理解しています - 識別子を使ってsegueメソッドの準備を使用します。しかし、ナビゲーションコントローラに組み込まれているので、SecondVCからHomeVCへのセグはありません。ナビゲーションスタックからSecondVCをポップすると、SecondVCからHomeVCに戻って、たとえば文字列などの情報をどのように渡すのですか?Swift:現在のビューコントローラの下のビューコントローラに情報を渡すにはどうすればよいですか?

+0

HomeからSecondに参照値を渡す場合、必要はありません。自動的に行われます。それが非参照値(クラスではなく構造体のようなもの)の場合は、2番目から3番目までの新しいセグを作成し、初めて同じことをする必要があります。 –

+1

@MagoNicolasPalacios新しいSegueを作成する必要はありません。単に「prepareForSegue」をオーバーライドし、既存のSegueを傍受し、構造体のように値の型(「非参照」と呼んでいます)をSecondViewControllerに渡します。 –

+0

恐ろしい@BrianOgden私は私が動いていたことを書いていました、瞬時に値のタイプ名と参照タイプを忘れました。 –

答えて

0

あなたは何を行うことは、あなたのセグエに識別子を与え、その後、あなたのHomeViewControllerでprepareForSegueを上書きされ、SecondViewControllerにHomeViewControllerからViewModelを渡す必要があります:あなたのSecondViewControllerで

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     // Get the new view controller using segue.destinationViewController. 
     // Pass the selected object to the new view controller. 

     if segue.identifier == "mySegueIdentifier" { 

      if let destination = segue.destinationViewController as? SecondViewController { 
       destination.aViewModel = aViewModel; 

      } 
     } 
    } 

あなたはViewModelに宣言する必要があります:

class SecondViewController: UIViewController { 

    var aViewModel: AViewModel? 
    //rest of code 
} 

そして、構造体の型を使用し、ViewModelにを作成します。

struct AViewModel 
{ 
    let AValueIWantToPassAround: String 
    let AnotherValueIWantToPassAround: Int 
} 
+0

ありがとうございましたが、私はそれを他の方法、つまりSecondViewControllerからHomeViewControllerに戻すのに助けが必要でした。 –

+0

@ aayushi_2303それは悪い設計上の決定です。なぜなら、子ビューは親に情報を渡す必要があります。子ビューコントローラが何かを変更した場合は、それを保持してから親ビューコントローラが別名をリフレッシュする再び表示されたときの永続性をチェックします。 –

+0

しかし、クイックで汚い長期的には、@MargoNicolasPalaciosのようなリファレンスタイプを使用することがあなたの質問に彼のコメントで言及しています。 –

関連する問題