12

ナビゲーションコントローラーを2回ポップすることは可能ですか?私はこのナビゲーション構造を持っています:

1つ表示---->2つ表示----->3つ表示

私が達成したいのは、ビュー3の行をタップして、ビュー1に直接戻ることです。私はprotocol-delegateを介して3から2にそれを行いましたが、ビュー1でデリゲートを設定すると機能せず、2つの連続したデリゲートプロトコルを設定すると、両方ともナビゲーションコントローラーがポップし、エラーが発生します:ネストされたナビゲーションコントローラーアクティビティ(または同様のもの) )。

どんな助けでもいただければ幸いです。前もって感謝します!

4

4 に答える 4

37

いくつかのポップオプションがあります

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
  • 最初は一番上のコントローラーをポップします。
  • 2 番目の方法では、スタック全体をポップしてルートに到達できます。
  • 3 つ目は、参照している任意の viewController にポップできるようにします。でviewControllerを取得してself.navigationController.viewControllersから、配列を操作して、ポップしたい特定のviewControllerを取得できます
于 2012-05-30T19:28:21.310 に答える
15

次のコードを使用します。-3別のレベルにポップする代わりに、任意の数値を使用できます。

オブジェクト C:

ViewController *View = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-3];
    [self.navigationController popToViewController:View animated:YES];

スウィフト 3.0*:

let controller = self.navigationController?.viewControllers[(self.navigationController?.viewControllers.count)! - 3]        
self.navigationController?.popToViewController(controller!, animated: true)
于 2013-06-11T11:08:35.063 に答える
8

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

[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:1] animated:YES];

それが役に立てば幸い!!

于 2013-08-07T12:13:57.060 に答える
3

'self' は最初の pop の後にリリースされるようです

UINavigationController *navigationController = self.navigationController;
[navigationController popViewControllerAnimated:NO];
[navigationController popViewControllerAnimated:YES];
于 2012-11-24T09:26:54.817 に答える