删除实际的navigationController并推送到另一个

时间:2013-01-24 12:57:01

标签: iphone ios uiviewcontroller

我有2个viewControllers A和B.

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

现在在控制器B中我有'加号'按钮,它将我推送到另一个B控制器(同一个ViewController)。现在,当我在secontr B viewController中,当我按下按钮时,我应该加载到一个viewController。所以我想知道当我推送另一个viewController时如何删除ViewControler?

情况如下:

A(推B) - > B(推B) - > B(推B) - > B(pop B) - >甲

感谢您的帮助。

5 个答案:

答案 0 :(得分: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]; 
}

答案 1 :(得分:1)

解决方案将在popToRootViewController: 在B3控制器上完成后调用此方法

所以它将是:   A(pushViewController B1) - > B1(pushViewController B2) - > B2(pushViewController B3) - > B3(popToRootViewController :) - > A

这对你有帮助吗?

答案 2 :(得分:1)

试试

 [self.navigationController popToRootViewControllerAnimated:YES];

或者

  [self.navigationController popToViewController:A viewcontroller animated:yes];

答案 3 :(得分:0)

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

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

希望这有帮助。

答案 4 :(得分: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的事情。标准的导航栏可以完成我们需要的一切。