1

我有 2 个视图控制器 A 和 B。

我想从控制器 A 推送到控制器 B,它工作得很好。

现在在控制器 B 中,我有一个“加号”按钮,它把我推到另一个 B 控制器(同一个 ViewController)。现在,当我在 secontr B viewController 中按下后退按钮时,我应该弹出到 A viewController。所以我想知道当我推送另一个视图控制器时如何删除视图控制器?

情况如下所示:

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

如果您只推送一次视图控制器 A,您可以尝试以下操作:

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 回答
0

虽然所有其他答案都很好,但在我看来,问题是你是否应该从B它自己的另一个副本推送。对我来说,这是由你是否想从一个跳到B上一个的问题来回答的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 回答