0

次のように、モーダルトランジションを使用してストーリーボードを設定しました。

ルート -> A -> B -> C

B から C に移行するときに、ユーザーが A、B、またはルートに戻ることができないため、バックスタックをクリアしたいと考えています。ルートView Controllerを削除できないことはわかっていますが、Cに移行するときにAとBをスタックから削除する方法はありますか.

私には Android のバックグラウンドがあり、次のアクティビティを開始する前に CLEAR_TOP および NEW_TASK フラグをインテントに追加するだけで実行できます。iOSに似たようなものはありますか?

B->C からの移行時にこれを呼び出そうとしていますが、アプリがクラッシュします。

[self dismissViewControllerAnimated:NO completion:nil];

ビューでこれも試してみましたが、Bのロードが行われましたが、機能しません。

[self.presentingViewController dismissViewControllerAnimated:NO completion:nil];

編集: C をルートにして、A->B と前のルートをクリアすることは可能ですか? どうやってそれをしますか?

4

4 に答える 4

3

C の viewDidAppear メソッドで、自分自身をウィンドウのルート ビュー コントローラーとして設定するだけです。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.view.window.rootViewController = self;
}

これを行うと、ルート、A、および B の割り当てが解除されます。

于 2013-07-29T03:57:21.523 に答える
1

おそらく、 UINavigationController を使用して目的を達成できます。B->C の後、コントローラー スタックをクリアするだけです。UINavigationController次のような遷移スタイルをカスタマイズできます。

CATransition *animation = [CATransition animation];
[animation setDuration:0.3];
[animation setType: kCATransitionMoveIn];
[animation setSubtype: kCATransitionFromTop];
[animation setTimingFunction:[CAMediaTimingFunction   functionWithName:kCAMediaTimingFunctionDefault]];

[nav pushViewController:yourViewController animated:NO];

[nav.view.layer addAnimation:animation forKey:nil];
于 2013-07-28T06:51:09.303 に答える
0

やってみました-removeFromSuperview

于 2013-07-28T06:50:55.167 に答える
0

使用できる 1 つのアプローチは次のとおりです。

root-> A -> B -> C -> (fakeRoot) => (本当のルート)

ルートを離れる前に、ルートのスナップショットを作成できます (このように)

次に、派手なモーダル遷移を使用して「偽のルート」に遷移しますが、実際のルートをその背後に置き、前進するコントローラーのタイプにします。次に、偽のルートを削除して、本物のルートを公開します。

  • 画面いっぱいの大きなimageViewだった「fakeRoot」コントローラーと呼ばれるviewControllerを作成します
  • 上記のスナップショットで作成した「root」のイメージに imageView を設定します。
  • このimageViewへのモーダル遷移を行います
  • アニメーションなしで nav コントローラーのルートにポップします (ルートが表示されるはずですが、モーダルに表示されたビューがそのように見えるため、気付かないでしょう)
于 2013-07-28T06:52:15.423 に答える