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

Iphone 删除实际的navigationController并推送到另一个,iphone,ios,uiviewcontroller,Iphone,Ios,Uiviewcontroller,我有两个视图控制器A和B 我想从控制器A推送到控制器B,然后它;It’很好 现在在控制器B中,我有了“加号”按钮,它将我推到另一个B控制器(同一个ViewController)。现在,当我在secontr B viewController中时,当我按下后退按钮时,我应该被弹出到一个viewController。所以我想知道当我按下另一个viewController时如何移除viewController 情况是这样的: A(推B)->B(推B)->B(推B)->B(弹出B)->A 谢谢您的帮助。解

我有两个视图控制器A和B

我想从控制器A推送到控制器B,然后它;It’很好

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

情况是这样的:

A(推B)->B(推B)->B(推B)->B(弹出B)->A


谢谢您的帮助。

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

因此,它将是: A(pushViewController B1)->B1(pushViewController B2)->B2(pushViewController B3)->B3(PoptrootViewController:)->A


这对您有帮助吗?

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

因此,它将是: A(pushViewController B1)->B1(pushViewController B2)->B2(pushViewController B3)->B3(PoptrootViewController:)->A

这对你有帮助吗?

试试看

 [self.navigationController popToRootViewControllerAnimated:YES];

试试看

 [self.navigationController popToRootViewControllerAnimated:YES];

试试这个

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]; 
}
试试这个

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]; 
}

如果只按一次view controller A,可以尝试以下操作:

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

希望这有帮助。

如果只按一次view controller A,可以尝试以下操作:

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

希望这能有所帮助。

虽然所有其他答案都不错,但在我看来,问题是你是否应该从
B
复制到另一个版本。对我来说,这个问题的答案是:你是否想从一个
B
弹出到前面的
B
。如果是这样的话,当您想返回到
A
时,可以使用另一个
poptrootviewcontrolleranimated
popToViewController
答案

如果不是,您根本不应该从
B
复制到另一个副本。但是,如果您想向用户演示“让我们再做一次”按钮,您可以使用
transitionWithView
。例如,如果我们假设您在
B
上有一组
UITextField
控件,并且您有一个“添加另一个”按钮,它可能会执行以下操作:

- (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的事情了。标准导航栏做了我们需要的一切。

虽然所有其他答案都很好,但在我看来,问题是你是否应该从
B
推到它自己的另一个副本。对我来说,这个问题的答案是:你是否想从一个
B
弹出到前面的
B
。如果是这样的话,当您想返回到
A
时,可以使用另一个
poptrootviewcontrolleranimated
popToViewController
答案

如果不是,您根本不应该从
B
复制到另一个副本。但是,如果您想向用户演示“让我们再做一次”按钮,您可以使用
transitionWithView
。例如,如果我们假设您在
B
上有一组
UITextField
控件,并且您有一个“添加另一个”按钮,它可能会执行以下操作:

- (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的事情了。标准导航栏做了我们需要的一切。

我的A控制器不是rootViewController,所以它不起作用,所以你可以使用这个解决方案:
[self.navigationController popToViewController:A viewcontroller动画:是]我的A控制器不是rootViewController,因此它不起作用,因此您可以使用此解决方案:
[self.navigationController popToViewController:A viewcontroller动画:是]
@edzio27:另外,如果堆栈中有多个A控制器&您希望弹出到稍后推送的A,那么您需要以相反的顺序遍历循环(您需要使用for/while循环)。为此,感谢Ishu。我也在这个主题@edzio27中找到了帮助:另外,如果堆栈中有多个A控制器&您希望稍后弹出到A,那么您需要以相反的顺序遍历循环(您需要使用for/while循环)。感谢Ishu。我也在这个主题+1中找到了帮助,但是,与公认的答案一样,这会找到第一个出现的
A
,如果您需要最后一个,您必须调整。显然,如果您想要第一个,那就是初始视图控制器,那么您只需执行
poptrootviewcontrolleranimated
+1,但是,与公认的答案一样,这会找到第一个出现的
A
,如果您需要最后一个,则必须进行调整。显然,如果您想要第一个,那就是初始视图控制器,那么您只需执行
popToRootViewControllerAnimated