1

私は2つのviewControllers AとBを持っています.

コントローラーAからコントローラーBにプッシュしたいのですが、うまくいきます。

コントローラー B には、別の B コントローラー (同じ ViewController) にプッシュする「プラス」ボタンがあります。これで、Secontr B viewController にいるときに、戻るボタンを押したときに、A viewController にポップする必要があります。別のviewControllerをプッシュしたときにViewControlerを削除する方法を知りたいですか?

状況は次のようになります。

A (B を押す) -> B (B を押す) -> B (B を押す) -> B (B をポップ) -> A

手伝ってくれてありがとう。

4

5 に答える 5

2

これを試して、

id tempViewCont=nil;
for(id viewCont in [self.navigationController viewControllers])
{
   if([viewCont isKindOfClass:[A class]])
   {
      tempViewCont=viewCont;
      break;
   }
}

if(tempViewCont)
{
  [self.navigationController popToViewController:tempViewCont animated:yes]; 
}
于 2013-01-24T13:11:16.283 に答える
1

解決策はpopToRootViewController: 、B3 コントローラーでの作業が完了したら、このメソッドを呼び出します

A ( pushViewController B1) -> B1 (pushViewController B2) -> B2 (pushViewController B3) -> B3 (popToRootViewController:) -> A

それはあなたを助けますか?

于 2013-01-24T13:01:23.790 に答える
1

ちょうど試して

 [self.navigationController popToRootViewControllerAnimated:YES];

または

  [self.navigationController popToViewController:A viewcontroller animated:yes];
于 2013-01-24T13:02:49.153 に答える
0

他のすべての答えは良いですが、私の考えでは、問題は、自分B自身の別のコピーにプッシュする必要があるかどうかです。B私にとって、これはあなたが1つから前にポップしたいかどうかという質問によって答えられますB。もしそうなら、それは問題ありません、そしてあなたがに戻りたいときに他のpopToRootViewControllerAnimatedいずれかまたは答えを使用してください。popToViewControllerA

Bそうでない場合は、それ自体の別のコピーにプッシュするべきではありません。ただし、「もう一度やりましょう」ボタンをユーザーに見せたい場合は、を使用できますtransitionWithView。たとえば、多数のUITextFieldコントロールがオンBになっていて、[別の追加]ボタンがあると想像すると、次のようになります。

- (IBAction)onPressAddButton:(id)sender
{
    // save the record here

    // now, let's animate the resetting of the text fields

    [UIView transitionWithView:self.view
                      duration:0.5
                       options:UIViewAnimationOptionTransitionCurlUp
                    animations:^{
                        self.textField1.text = nil;
                        self.textField2.text = nil;
                        self.textField3.text = nil;
                    }
                    completion:nil];
}

ちなみに、この方法で行うと、BからAに戻るために特別なことをする必要がなくなります。標準のナビゲーションバーが必要なすべてを実行します。

于 2013-01-24T15:03:07.727 に答える
0

ビュー コントローラ A を 1 回だけプッシュしている場合は、次のことを試すことができます。

NSArray *tempArray = [self.navigationController viewControllers];
for (id viewController in tempArray) {
    if ([viewController isKindOfClass:A]) {
        [self.navigationController popToViewController:viewController animated:yes];
        break;
    }
}

お役に立てれば。

于 2013-01-24T13:34:03.323 に答える