试图了解解雇ViewControllers

时间:2013-11-17 20:39:29

标签: objective-c uiviewcontroller

我试图解雇一个视图控制器,并且有几种方法可以调用所有类似的方法。 #1工作但其他人没有。我什么时候应该使用其中一种而不是另一种?

1. [self dismissViewControllerAnimated:YES completion:nil]; (this one worked).
2. [self.parentViewController.navigationController popViewControllerAnimated:YES];
3. [self.navigationController popViewControllerAnimated:YES];
4. [self performSegueWithIdentifier:@"showPreviousController" sender:self];
5. [self.navigationController popToRootViewControllerAnimated:YES];

2 个答案:

答案 0 :(得分:1)

[self dismissViewControllerAnimated:YES completion:nil];

如果您没有导航控制器并且想要跳回到上一个视图控制器,则此方法可以正常工作。

下一个按钮跳转到视图控制器B,当按下解除按钮时,它调用dismissViewControllerAnimated:方法并跳回第一个视图控制器。


[self.parentViewController.navigationController popViewControllerAnimated:YES];

引用Apple关于parentViewController的文档:

  

如果收件人是容器视图控制器的子级,则此属性包含其所包含的视图控制器。如果收件人没有父级,则此属性中的值为nil。


[self.navigationController popViewControllerAnimated:YES];

这会跳回到前一个视图控制器。您需要设置导航控制器才能使用此方法。否则没有任何反应。

如果按视图控制器B中的“关闭”按钮并且该按钮调用popViewControllerAnimated:方法,它将跳回到视图控制器A.


[self performSegueWithIdentifier:@"showPreviousController" sender:self];

这样可以执行带有标识符的seque。在故事板中,您可以设置seques的标识符。

如果选择了seque,则可以在“属性”检查器中设置标识符:


[self.navigationController popToRootViewControllerAnimated:YES];

这会跳回到第一个视图控制器。称为根控制器。因此,如果您有5个视图控制器(A - > B - > C - > D和E)并且您在E处调用popToRootViewControllerAnimated:,它将跳回到A控制器。

答案 1 :(得分:0)

这些方法都做不同的事情,我建议你阅读View Controller Programming Guide,因为你混淆了几个概念。

然而,这是他们所做的总结:

[self dismissViewControllerAnimated:YES completion:nil]; (this one worked).

关闭此控制器提供的视图控制器(self)。


[self.parentViewController.navigationController popViewControllerAnimated:YES];

在父级导航控制器中弹出顶视图控制器。这很奇怪,可能是错的。 parentViewController是当前嵌入的视图控制器。您正在访问其导航控制器并使其在堆栈顶部弹出视图控制器。在以下情况下它会默默地失败:

  • parentViewControllernil
  • navigationControllernil

[self.navigationController popViewControllerAnimated:YES];

在当前导航堆栈顶部弹出视图控制器。如果当前控制器已被导航控制器按下(并且未以模态方式呈现),则有意义。


[self performSegueWithIdentifier:@"showPreviousController" sender:self];

嗯,这是执行showPrviousController segue,无论它做什么......


[self.navigationController popToRootViewControllerAnimated:YES];

这使当前导航控制器弹出所有视图控制器,除了根控制器,它将保持在最顶层。

相关问题