2012-06-18 36 views
28

我想知道他们有什么不同。 当我可以调用dismissViewControllerAnimated VS popViewControllerAnimated

[self dismissViewControllerAnimated:YES completion:nil]; 

,当我应该调用

[self.navigationController popViewControllerAnimated:YES]; 

根据苹果的文件: dismissViewControllerAnimated装置 “驳回这是由接收器呈现的视图控制器”。 但我总是无法通过这种方法解雇视图控制器。

+0

至于解雇请参阅斯坦福的[this](https://youtu.be/oTsg-uJfxD4?t=556)视频。应始终将dismissViewController发送到* present * viewController。如果你发送给它的*呈现* viewController和presentViewcontroller没有提出**一个** nother viewController *然后*它会解雇它适当,否则它不会这样做的权利 – Honey

回答

38

你选择的应用程序是基于导航应用意味着

[self.navigationController popViewControllerAnimated:YES]; 

您选择的应用程序以外的其他导航应用基础手段

[self dismissViewControllerAnimated:YES completion:nil]; 
+0

所以这意味着:我不应该使用dismissViewControllerAnimated在基于导航的应用?我认为这是为什么我总是无法解雇ViewControllerAnimated的原因,谢谢! –

36

-dismissViewControllerAnimated:完成:

用于解雇了由该方法呈现的UIViewController

-presentViewController:animated:completion:

-popViewControllerAnimated:UINavigationController

用于弹出通过UINavigationController

-pushViewController:animated方法示出的控制器。

在第一种情况下,视图控制器的视图显示为模式控制器(通常从下到上),第二种情况是您在UINavigationController的导航堆栈中推视图控制器。

相关问题