ビューを閉じないdismissViewControllerAnimated
メソッドに問題があります。
ここでアプリで起こっていることは次のとおりです。
ItemViewController
のセルが選択されています。ItemDetailViewController
であり、詳細はデリゲートを介して送信されますItemViewController
で閉じられますビューを除くこのすべての作業は却下されず、エラーはありません。誰でも何が間違っているのかわかりますか?
- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller
{
NSLog(@"Controller: %@", controller);
// Returns - Controller: <ItemDetailViewController: 0x6b68b60>
[self dismissViewControllerAnimated:YES completion:nil];
}
代わりに[controller.navigationController popViewControllerAnimated:YES]
を呼び出すとどうなりますか?
さらに、自分で呼び出すのではなく、[controller dismissViewControllerAnimated:YES completion:nil]
を呼び出すとどうなりますか?
答えはこのページにあります: dismissviewcontrolleranimated-vs-popviewcontrolleranimated
dismissViewControllerは、navigationcontrollerがない場合に使用されます。最も可能性が高いのは、Navigation Controllerを使用し、代わりにself.navigationController popViewControllerを使用することです。
また、彼の発言に注意してください:completionhandlerにはnillではなくNULLを使用してください
IOS5で問題が発生し、標準の完了コールバックではビューを完全に閉じることができませんでした(そのモーダルの現在プッシュされたビューのみ)
[controller dismissViewControllerAnimated:YES completion:^ {
//
}];
iOS5のソリューションはコールバックを持たないことです:
[controller dismissViewControllerAnimated:YES completion:nil];
dismissViewControllerAnimated
を呼び出すと、UIViewControllerのキーボードは消えますが、ビュー自体は消えないという問題がありました。
2つの呼び出しを使用して解決しました。
[self dismissViewControllerAnimated:NO completion:nil];
[self dismissViewControllerAnimated:YES completion:nil];
キーボード用のインスタントのもの、次にコントローラー用のアニメーション化されたもの
あなたの状況は-ItemViewController-> ItemDetailViewController(navigationControllerでプッシュ)Self.dismissViewController(..)selfで表示されるView Controllerを破棄します(URの場合はItemViewControllerです)。ここでは、uはVC selfを提示せず、代わりに新しいVCをナビゲーションスタックを介してプッシュしました。ItemDetailViewControllerを閉じる正しい方法は
self.navigationController.popViewController(true)。 dismissViewController(....)の説明を読んで、より明確にしてください。