web-dev-qa-db-ja.com

dismissViewControllerAnimatedが呼び出されますが、ViewControllerは閉じられません

ビューを閉じないdismissViewControllerAnimatedメソッドに問題があります。

ここでアプリで起こっていることは次のとおりです。

  • ItemViewControllerのセルが選択されています。
  • ビューはPush ed to ItemDetailViewControllerであり、詳細はデリゲートを介して送信されます
  • ユーザーが「完了」を選択すると、イベントはデリゲート経由で送信され、ItemViewControllerで閉じられます

ビューを除くこのすべての作業は却下されず、エラーはありません。誰でも何が間違っているのかわかりますか?

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

    [self dismissViewControllerAnimated:YES completion:nil];
}
44
Ad Taylor

代わりに[controller.navigationController popViewControllerAnimated:YES]を呼び出すとどうなりますか?

さらに、自分で呼び出すのではなく、[controller dismissViewControllerAnimated:YES completion:nil]を呼び出すとどうなりますか?

66
Nick Lockwood

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

dismissViewControllerは、navigationcontrollerがない場合に使用されます。最も可能性が高いのは、Navigation Controllerを使用し、代わりにself.navigationController popViewControllerを使用することです。

また、彼の発言に注意してください:completionhandlerにはnillではなくNULLを使用してください

10
Leander

IOS5で問題が発生し、標準の完了コールバックではビューを完全に閉じることができませんでした(そのモーダルの現在プッシュされたビューのみ)

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

iOS5のソリューションはコールバックを持たないことです:

[controller dismissViewControllerAnimated:YES completion:nil];
5
Danoli3

dismissViewControllerAnimatedを呼び出すと、UIViewControllerのキーボードは消えますが、ビュー自体は消えないという問題がありました。

2つの呼び出しを使用して解決しました。

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

キーボード用のインスタントのもの、次にコントローラー用のアニメーション化されたもの

4
Cbas

あなたの状況は-ItemViewController-> ItemDetailViewController(navigationControllerでプッシュ)Self.dismissViewController(..)selfで表示されるView Controllerを破棄します(URの場合はItemViewControllerです)。ここでは、uはVC selfを提示せず、代わりに新しいVCをナビゲーションスタックを介してプッシュしました。ItemDetailViewControllerを閉じる正しい方法は

self.navigationController.popViewController(true)。 dismissViewController(....)の説明を読んで、より明確にしてください。

0
Arya