1

したがって、モーダルviewControllerBを表示するviewControllerAがあります。

次に、BはviewControllerCを提示します。

私がやろうとしているのは、viewController Bがもう必要ないので、それを閉じることです。Bを却下し、Aの子としてCを画面に表示したままにする簡単な方法はありますか?

4

4 に答える 4

2

明らかに、多くの人が言っているように、教科書の世界では、これは代表的な状況になるでしょう。AプレゼントBBプレゼントの場所C。次に、C完了すると、どちらが却下されるかが通知され、次に却下するようにB指示CされBます。AB

基本的に、ナビゲーションスタックに相当するモーダルに表示されるビューコントローラーのセットを作成していると思います。私はおそらくそれをそのように実装するでしょう。Aルートビューコントローラはどこにありますか。A次に、スタックにプッシュBし、スタックにBプッシュCします。実行されたときC、それは単純にpopToRootViewControllerAnimated:、またはrootViewControllerでなければ可能でしたpopToViewController:A animated:YESA

Bまた、下から外すのCは問題があるようです。しかし、それはあなたのコメントに基づいて石に設定されているようには聞こえません:

しかし、とにかく、私がそのviewControllerをしばらくそこに置いておけば、それは世界の終わりではありません。– </ p>

これにより、少なくともかなりクリーンなデリゲートのセットアップが可能になります。

Cそれでも、基本的には、ユーザーが使い終わったら、二度と必要になることはないことを知っているようですB。この場合、一度に2つ以上のビューコントローラを盲目的に閉じることができます。そして、一度に2つのコードはかなり単純です。(iOSバージョン> 5.0を想定)

[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES];

私が盲目的に言ったことに注意してください!このコードは寛容ではなく、仮定を立てています。たとえば、最も明白なのは、ビューコントローラが実際にを持っていることpresentingViewControllerとそのビューコントローラがを持っていることpresentingViewControllerです。これらの基準のいずれかが満たされない場合、このコードは何もしませ。これは、いつでもアプリを再構築した場合に簡単に発生する可能性があります。

したがって、このコード行を使用する場合は、慎重に使用してください。UINavigationControllerそして、このビュー階層、または少なくとも委任にを使用することを検討してください。

于 2012-09-06T05:43:26.603 に答える
1

あなたはこの仕事をすることができるかもしれません:

  • 「dieOnDismiss」のようなBのプロパティを提供します

  • Bに「dismissViewControllerAnimated:YES」を実装し、メッセージをスーパーに転送します

  • Cはオプションでそのプロパティを設定します

  • CがB'dismissViewControllerAnimated:'を送信すると、Bは却下をsuperに送信し、すぐにA' dismissViewControllerAnimated:NO'を送信します。

1つのトランジションでアニメーションを使用して、正しく表示できるかどうかわからない場合は、使用できる可能性があります。しかし、そうでない場合は、アニメーションなしでAに戻ることができます。

于 2012-09-05T20:30:51.747 に答える
1

AがCの提示方法を定義するプロトコルに準拠するようにしてから、BがC自体の提示を担当するのではなく、BがAを呼び出してCの提示をトリガーするようにすることができます。CがBとは独立して存在できる場合、Aは事実上両方の「親」として機能しています。

于 2012-09-05T22:36:11.943 に答える
0

ルートビューコントローラーへの弱いポインターを保持する共有インスタンスを持つことができます(つまり、ここではA)。この共有インスタンスを使用して、Aへのこのポインターを使用して、Aから必要なときにいつでもCを提示/却下します。

編集

これは、TimDからの回答をフォローアップするためのものです。いずれにせよ、私が提案したアプローチでは、CとBの両方がAから提示されます。

于 2012-09-05T22:19:16.870 に答える