3

ストーリーボードとナビゲーション コントローラーを使用するアプリがあります。アプリ フローのある段階で、ビュー スタックに約 4 つのビューを取得します。その時点で、ルート ビューに到達するまですべてのビューをポップオフする必要があります。その後、別のビューを手動でプッシュする必要があります。

私は運が悪いので、さまざまなことを試しました。組み込みの API 呼び出しを使用しようとしました。

[self.navigationController popToRootViewControllerAnimated:YES];

その時点で、ルート ビューを参照してセグエ メソッドを呼び出して、プッシュ セグエを呼び出そうとします。

RootView *obj = [[RootView alloc] init];
[obj callSegue];

または

[self.navigationController performSegueWithIdentifier:@"pushView" sender:self];

とにかく、私はこれに完全に困惑しています。誰でも助けることができますか?

アップデート:

返信ありがとうございます。私はもう少し掘り下げていて、解決策を見つけました。確かに多くの解決策の1つです。

// Reference to navigation controller. Apparently if you use self.navigationController in a popToRootViewController call it sets self.navigationController to nil.
UINavigationController *navigationController = self.navigationController;
[navigationController popToRootViewControllerAnimated:NO];

// Reference to view to push - must set storyboard ID in inspector
ViewToPush *viewRef = (ViewToPush *)[self.storyboard instantiateViewControllerWithIdentifier:@"gameView"];
[navigationController pushViewController:gameView animated:NO];
4

3 に答える 3

2

これはどう?

[self.navigationController setViewControllers:@[rootViewController, viewControllerTwo] animated:YES];

これにより、スタックがルートに設定され、新しいコントローラーとプッシュ アニメーションが使用されます。の簡単なダーティ リファレンスが必要な場合はrootViewController、 を使用できます[[self.navigationController viewControllers] objectAtIndex:0]

于 2013-03-29T10:42:03.023 に答える
1

これに対する適切な解決策は、「Unwind Segue」を使用することです。IBAction基本的に、アンワインド セグエは、プッシュされたコントローラーのスタックに戻り、宛先コントローラーでメソッドを実行するセグエです。あなたがしたいことは、現在のコントローラーからルートへのアンワインド セグエを作成し、performSegueWithIdentifier:呼び出されたメソッドに呼び出しを配置することです。

セグエの巻き戻しに関するチュートリアルは次のとおりです。チュートリアル

于 2013-03-29T10:47:16.930 に答える
0

これを試すことができます:

  • ルート VC にフラグ (a @property) を設定します。shouldPushAutomatically
  • を呼び出す VC で[self.navigationController popToRootViewControllerAnimated:YES];、メソッドを実装しprepareForSegue:WithIdentifier:ます。このメソッドでは、 を使用(MyVC*)segue.destinationViewControllerしてルート VC にアクセスし、yourflag を に設定しYESます。
  • ルート VCのviewDidLoadで、プッシュ セグエを呼び出してみてください (実際には、 で呼び出す必要がある場合がありますviewDidAppear)。

これが機能するかどうかはわかりませんが、それが私が機能させようとする方法です。

于 2013-03-29T10:49:31.667 に答える