2016-04-30 8 views
0

私が持っている3つのビューコントローラのUIViewController連続解任コール

  • ViewControllerA
  • ViewControllerB
  • ViewControllerCは

これは私が

  • ViewControllerAを解決しようとしているシナリオですViewControllerBをプッシュn個のナビゲーション階層
  • ViewControllerBがモーダルとしてViewControllerCを提示近い デリゲート

  • ViewControllerC閉じるボタンが押されると、近くにデリゲートが送信され、ViewControllerCは

  • ViewControllerBが近い委任を受けて、しようとしたが却下されますViewControllerAがViewControllerBがBではないいくつかの理由について

を表示されるように 自体を却下解雇される。 ViewControllerBでキャンセルボタンを押すと、そのボタンを閉じることができます。

なぜ連続して終了できないのですか?

ViewControllerC

@IBAction func closeClick(sender: AnyObject) { 
    self.closeDelegate?.didClose() 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

ViewControllerB

func didClose() { 
     print("did close") // gets called 
     self.dismissViewControllerAnimated(false, completion: nil) // no dismiss 
     //self.navigationController?.popViewControllerAnimated(false) 
} 

@IBAction func cancelClick(sender: AnyObject) { 
     self.dismissViewControllerAnimated(true, completion: nil) // works 
} 
+0

ViewControllerCではなくViewControllerBからdismissViewControllerを呼び出す必要があります。あなたの説明から、pushControllerAnimatedという名前で、ViewControllerBを表示するように思えます。それが真であれば、popViewControllerAnimatedを呼び出してViewControllerAに戻る必要があります。 –

+0

あなたが 'didClose'デリゲートを呼んだ時点で、View Controller Cはまだそれ自身を却下していません。あなたがストーリーボードを使用している場合、アンワインドセグを定義してコントローラAを表示し、それをビューコントローラcからトリガします。そうしないと、 'didClose'デリゲート*を呼び出した後にデリートするか、ビューコントローラbがデリゲート方法 – Paulw11

+0

@ Paulw11私は、提案されたようにコントローラBからビューCを閉じることになった。あなたがこれを答えとして当てはめると、私は「答えた」とマークすることができます。ビューAを表示する前に、ビューBのフラッシュが見えるほど滑らかではありませんが、 – fes

答えて

1

あなたは、あなたのナビゲーションコントローラにビューコントローラBを推進していると述べました。ビューコントローラBを含むナビゲータコントローラがルートビューコントローラであるため、ビューコントローラBを閉じることはできません。

ナビゲーションコントローラーのルートビューコントローラーに戻ってpopに戻る必要があります。そのため、ビューコントローラーAのデリゲートメソッドの実装では、ポップを実行する必要があります。

関連する問題