presentの時は最初のviewconに直接戻ることができます

2324 ワード

私は间违っていないで、直接帰ることができるのです
 [self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES]; 

 
A present BそしてB present C
今Cの中で方法を実现したいと思って、直接Aに帰ることができて、私はもとは似たような方法があると思っています:self.parentviewcontroller dismiss.........
さっきやってみたがだめだと誰が知っていたのか、後でグループの兄弟に聞いた.私は間違っていてもいいと言った.navigationcontrollerの時だけrootviewcontrollerに戻ることができるが、dismissは1階1階しか取り除くことができない.
まさか他の方法は直接dismissがAに着くことを実现することができませんか:非也!!!
グループの兄弟のアドバイスによると:
あなたはBに依頼して、Cをポップアップする時、Cはdismissを呼び出して、コールバックはBにもdismissを知らせます
 
転載先:http://blog.csdn.net/kmyhy/article/details/7034202
 
1つのViewController A、1つのModal View Controller B、Bはまた1つのModal ViewController C⋯⋯⋯⋯and soonをポップアップした.
n番目のModal View Controlで最初のView Control Aに戻りたい場合、またはその前のm番目のModalView Control Cに戻りたい場合は、どうすればいいですか?
あなたはきっと、次々と解散したいと思っています.そう、私も最初はそうしました.CでDを解散し、BでCを解散し、AでBを解散しました.「現在表示されていないView Controlを解散しようとした」というエラーが表示されます.
アップルの思考は並外れていて、実はあなたはModal View Controlを解散すればいいだけです.つまり最下層のViewControllerであり、この層の上にあるModalView Controllerはすべて解散される.
例えば、あなたがAでBを解散するだけで、C、D、E、F......はすべて自動的に解散されます.
問題は、FでどのようにAを手に入れますか?iOS 4の場合、parentView Controlを使用して、現在のModal View Controlの親View Controlを取得し、自分を解散できます.iOS 5であればpresentingViewControlを使わなければなりません.
このようにして、あなたは絶えずparentViewController.parentViewController.parentViewControllerを降りて行けばいいです.
コード:
if ([self respondsToSelector:@selector(presentingViewController)]) {

    [self.presentingViewController.presentingViewControllerdismissModalViewControllerAnimated:YES]; // for IOS 5+

} else {

   [self.parentViewController.parentViewControllerdismissModalViewControllerAnimated:YES]; // for pre IOS 5

}

 
問題は、現在のModal View Controlがチェーンのどのレベルなのか分からない場合があります.例えば、Bに2つのブランチがあり、1つはA->B->C->Dであり、1つはA->B->Dであり、どのブランチを行くかは、ユーザーの選択に依存するワークフローがある.DまたはFにかかわらず、処理が完了したらAに戻ってリフレッシュする.
Dという場所でAに戻るとき、Aに戻るにはいくつかのparentView Controlを使うか決められません.3個(分岐1)かもしれないし、2個かもしれないので(ブランチ2).この場合はプロトコルか依頼しかありません.Aをdelegateとしてワークフローに沿って絶えず伝えていくことで、ブランチ1やブランチ2の流れにかかわらず、Dには常にAの参照があります.Dの作業が完了したら、直接A実装のプロトコルメソッドを呼び出し、AのこのメソッドでBを解散すればいいのです.