2016-07-15 5 views
0

ボタンを押して2番目のviewControllerボタンを押した後、2番目のビューコントローラに戻ってすぐにファンクション第1 ViewControllerスウィフトファイル内にコード化されています。最初のビューで2番目のビュー(即時)から

どうすればいいのですか?セグー?

+0

あなたが第一のViewControllerを設定することができますが、2番目のビューコントローラのプロパティを委任しているコーディング。ボタンを押すと、第1ビューコントローラ – larva

+0

にデリゲート関数を呼び出します。第2ビューコントローラが提示されると、コールバックとしてクロージャを渡し、 'IBAction'でクロージャを呼び出します。 – vadian

答えて

2

これを行うには、とdelegateの2つの方法があります。

を作成し、そのプロトコルをViewController1に拡張することができます。 ViewController2にプロトコルのdelegateを作成し、ViewController1'sprepareForSegueメソッドでそのデリゲートの参照を渡します。

まず今すぐViewController2にの代理オブジェクトを作成し、このようViewController1でこのプロトコルを拡張し、prepareForSegue方法

class ViewController1 : UIViewController, PassdataDelegate { 


    func passData() { 
     //Here call your function 
     self.callMyFunction() 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if (segue.identifier == "SegueIdentifier") { 
      let destVC = segue.destinationViewController as! ViewController2 
      destVC.delegate = self 
     } 
    } 
} 

にデリゲートの参照を渡すこの

protocol PassdataDelegate { 

    func passData() 
} 

などのプロトコルを作成しますこのように

class ViewController2 : UIViewController { 

    var delegate: PassdataDelegate? 

    //Now call the method of this delegate in Button action 
    @IBAction func buttonClick(sender: UIButton) { 
     self.delegate.passData() 
     //Now dismiss the controller 
    } 
} 

注:ここで私はstringを渡していますが、delegateメソッドで宣言しているオブジェクトのタイプはすべて渡すことができます。

+0

クイック返信をありがとう、しかし、私はちょうど2番目のビューを却下し、任意の文字列を渡すことなく、最初のビューでfuncを呼び出す場合?上記のコードをどのように変更できますか? – Clarence

+0

私は私の答えを編集したので、 'ViewController1'のデリゲートメソッドを追加しました。デリゲートメソッドでメソッドを呼び出すようになりました。 –

+0

ありがとう、本当に役に立ちました。 – Clarence

1

unwind segueを参照できます。

class ViewController1 { 
    @IBAction func doSomeStuffAfterReload(segue: UIStoryboardSegue) { 
    // do whatever you need to do here. 
    } 
} 
exit outletから buttonからViewController2 Ctrlキー+ドラッグからストーリーボードで

、およびdoSomeStuffAfterReloadを選択します。

現在のアクションでそれを見ることができます:https://spin.atomicobject.com/2014/10/25/ios-unwind-segues/ ハッピー^^

関連する問題