2012-02-23 7 views
2

私は基本モダルビューコントローラーを持っています。今私は戻って最初のビューコントローラに戻したい2つのモーダル表示コントローラーを閉じる

ScoutingReportViewController *scoutingReport = [self.storyboard instantiateViewControllerWithIdentifier:@"ScoutView"]; 
[self setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; 
[self presentModalViewController:scoutingReport animated:YES]; 

:私は3番目のビューコントローラを呼び出し、そこから

FieldReportViewController *fieldReport = [self.storyboard instantiateViewControllerWithIdentifier:@"fieldReportView"]; 
[self presentModalViewController:fieldReport animated:YES]; 

:私はその後で第二1を作成します。 I(これは、現在のビューコントローラが示されている)試した:

-(IBAction)doneBtn 
{ 
    //[self.parentViewController dismissModalViewControllerAnimated:YES]; //removed 

    [self dismissModalViewControllerAnimated:NO]; //added 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"CloseAllModalViews" object:nil userInfo:nil]; //added 

} 

の中央/ビューコントローラで、iは、のviewDidLoadでオブザーバーを追加:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(dismissModals:) 
              name:@"CloseAllModalViews" 
              object:nil]; 

及び方法:

-(void) dismissModals:(id)sender 
{ 
    [self dismissModalViewControllerAnimated:NO]; 
} 

を押すと何もしません。それはどんな意見も却下しません。

どのように私はこれを動作させることができますか?

編集:なぜそれがクラッシュしたのかを理解しました。私はIBの完了ボタンにセグを追加したことを忘れていました。これはメモリの問題を引き起こし、クラッシュを引き起こしていました。

EDIT 2:両方のビューコントローラをベース/最初のビューコントローラに戻します。それは私にアニメーションを与えません。私はアニメーションなしで現在のVCを却下し、中間のVCをアニメーションで却下することができますが、移行の前に中間のVCが少し見えます。可能であれば、現在のVCからベースVCへのアニメーションを持つことを好むでしょう。

+0

コンソールに何もヒントを:あなたは自動却下したいあなたのビューで

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissModals:) name:@"CloseAllModalViews" object:nil]; 

は、あなたのdoneBtnの方法でこれを入れていますか?あなたがそれを構築するときにxcodeからの警告? –

+0

いいえ、私はipadでそれを実行するとコンソールにクラッシュ情報はありません。私は、xcode 4.2がクラッシュ時に以前のバージョンよりも少ないフィードを返すことに気付きました。 =/ – Padin215

+0

最初のviewcontrollerがナビゲーションコントローラの場合、 'popToRootViewControllerAnimated:'を使うことができます。それを変えたい? –

答えて

0

私は以前これを行っていましたが、UINotificationCenterを使用して中間のビューを閉じなければなりませんでした。 doneBtnを押すと、通知が送信されます。他のビューをプッシュする前に、dismissModalをアクションとして追加します。アニメーションを削除すると、元のビューに戻ったように見えます。あなたは、デバイス上でそれを実行したときに

[[NSNotificationCenter defaultCenter] postNotificationName:@"CloseAllModalViews" object:nil userInfo:nil]; 
+0

すごい、これは動作します。私は素敵なトランジションを得られません。現在のモーダルをアニメーション化すると、中間のモーダルは解除されません(現在のモーダルがアニメーションで解除され、2回目の消滅が失われてしまうので、私は推測しています)。私は現在のモーダルをアニメーション化することはできず、中間のモーダルをアニメートすることはできませんが、その後、私はトランジションの前に簡単に第2モーダルを見ます。私はどちらかを動かすことができず、基本モーダルに直進します。私はアニメーション化されたトランジションを好むでしょう、あなたはそれが可能だと思いますか? (私は新しいコードを使ってポストを更新します) – Padin215

+0

正しくアニメーション化したい場合は、遅延やタイミングを追加する必要があります。私はそれが問題の最もエレガントな解決策ではないことを認めますが、それはうまくいきます。まともな回避策を見つけたら、投稿してください。 –

関連する問題