2012-01-24 20 views
43

dismissViewControllerAnimatedメソッドでビューを閉じることができません。ここではアプリで何が起こっているdismissViewControllerAnimatedが呼び出されましたが、ViewControllerが閉じられません。

は次のとおりです。ItemViewController

  • セルが選択されています。
  • ビューがItemDetailViewControllerと細部へのプッシュエドが、デリゲートを介して送信される
  • ユーザーは、[完了]を選択し、イベントはItemViewController

にクローズするデリゲートを介して送信されるこのすべては除いて動作しますビューが閉じられないため、エラーはありません。誰が何が間違っているのを見ることができる?

- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller 
{ 
    NSLog(@"Controller: %@", controller); 
    // Returns - Controller: <ItemDetailViewController: 0x6b68b60> 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

代わりに 'dismissModalViewControllerAnimated:'を送信するとどうなりますか? –

+0

'self'はどのように画面にプッシュされますか? – Nekto

+0

@Vince:私は試しましたが、セグが「プッシュ」であれば動作しないようです。 –

答えて

65

代わりに[controller.navigationController popViewControllerAnimated:YES]に電話するとどうなりますか?

[controller dismissViewControllerAnimated:YES completion:nil]に電話するのではなく、自分で電話するとどうなりますか?

+4

+1 - 'プッシュ'なので 'ポップ' –

+1

ありがとうございました!とても有難い。 –

+8

私のために働いた正確な構文:[self.navigationController popViewControllerAnimated:YES]; – Dan

10

答えはこのページにあります。 dismissviewcontrolleranimated-vs-popviewcontrolleranimated

dismissViewControllerあなたはnavigationcontrollerを持っていないときに使用されます。 ほとんどの場合、ナビゲーションコントローラを使用していて、代わりに self.navigationController popViewControllerを使用します。

もlemaxの彼の発言のメモを取る:(私は標準の完了コールバックは、ビューを完全に却下することができていなかったiOS5を中に問題があったcompletionhandlerにNULL、ないnillを使用

+0

ありがとう、それはnilが私の問題があった場所のようです。 – John

+2

非オブジェクトポインタにNULLを使用します。だからここでNULLを使うべきではありません。 –

+2

MacTypes.hには#define nil NULL ... –

4

をのみ、現在はのビューをプッシュiOS5をのためにそのモーダル)

[controller dismissViewControllerAnimated:YES completion:^ { 
    // 
}]; 

ソリューションは、コールバックを持っていないことです。

[controller dismissViewControllerAnimated:YES completion:nil]; 
3

dismissViewControllerAnimatedを呼び出すと、UIViewControllerでキーボードが却下され、ビュー自体は消えてしまうという問題がありました。 ItemViewController - - > ItemDetailViewController (navigationControllerにプッシュ状況であるコントローラ

+0

があります。 –

0

ためのアニメーション1次に、インスタントキーボードのための1つ

[self dismissViewControllerAnimated:NO completion:nil]; 
[self dismissViewControllerAnimated:YES completion:nil]; 

は、二つの呼び出しを使用してそれを解決しました) Self.dismissViewController(..)は自己(selfで提示されたView Controllerを却下する(ItemViewControllerの場合)。ここでは、uは自己を上回るVCを提示しなかった。代わりにuはナビゲーションスタック上に新しいVCをプッシュした。だから、ItemDetailViewControllerを却下する正しい方法は

self.navigationController.popViewController(true)になります。 dismissViewController(....)の説明を読んでもっと分かりやすくしてください。

関連する問題