我有2个viewControllers A和B.
从控制器A我想推送到控制器B,它的工作很棒。
现在在控制器B中我有'加号'按钮,它将我推送到另一个B控制器(同一个ViewController)。现在,当我在secontr B viewController中,当我按下按钮时,我应该加载到一个viewController。所以我想知道当我推送另一个viewController时如何删除ViewControler?
情况如下:
A(推B) - > B(推B) - > B(推B) - > B(pop B) - >甲
感谢您的帮助。
答案 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
时,可以使用其中一个popToViewController
或A
答案。
如果没有,你根本就不应该从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的事情。标准的导航栏可以完成我们需要的一切。