2

シリアル ビュー (A、B、C、D、...) を持つアプリケーションを作成しましたが、D を B に戻す必要があります。

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

ただし、これは良い解決策ではありません。このメソッドでは、「B」が格納されているインデックスを取得する必要があるためです。

質問: viewControllers で "B" のインデックスを取得するにはどうすればよいですか?

UIViewControllers"< A : 0x6e70710
>"、"< C: 0x6e30370 >"、"< B: 0x6988a70 >"、"< D: 0x6ea8950 >"、"< E: 0x6eaaad0 >"

「B」ビューのインデックスを使用rangeOfStringして取得しようとしましたが失敗しました。hasPrefix

4

2 に答える 2

15

Concept Of Stackここで、NavigationControllerが.ieによってViewControllerを管理していることを知りたいと思います。これLAST COME FIRST OUTを行うための2つのアプローチがあります。

1)ここでは、以下のように目的のViewControllerを取得するための反復を行うことができます

  for (id controller in [self.navigationController viewControllers])
   {
   if ([controller isKindOfClass:[BViewController class]])
  {
    [self.navigationController popToViewController:controller animated:YES];
    break;
  }
  }

2)ここにA,B,C,Dコントローラーがあります。意味Bは3位になるので、何ができますか

インデックスを以下のように配線できます

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

私はそれがあなたに完全に役立つかもしれないことを願っています。

于 2012-11-15T07:50:09.027 に答える
8

おそらく次のようなことができます:

for (UIViewController *controller in [self.navigationController viewControllers])
{
    if ([controller isKindOfClass:[B class]])
    {
        [self.navigationController popToViewController:controller animated:YES];
        break;
    }
}

アップデート:

iOS 6 では、アンワインド セグエを使用するだけで、これらすべてを処理できます。B クラスに移動し、巻き戻しアクションを定義します (IBAction戻り値の型とUIStoryboardSegueパラメーターの組み合わせによって識別されます)。たとえば、次のようになります。

- (IBAction)done:(UIStoryboardSegue *)segue
{
    // do any clean up you want
}

control次に、B によって提示されたコントローラーは、たとえば、ボタンからシーンのドックの終了アイコンに -ドラッグすることによって、アンワインド セグエを作成できます。必要に応じて、アンワインド元のコントローラーに期待どおりの動作をさせることができますprepareForSegue(これは、B のアンワインド アクションの前に呼び出されます)。

于 2012-11-15T07:48:46.877 に答える