为Swift 3更新
我来到这里只是想消除当前的(显示的)视图控制器。我正在为有相同目的来到这里的任何人提供这个答案。
导航控制器
如果您使用的是导航控制器,则非常简单。
返回上一个视图控制器:
// Swift
self.navigationController?.popViewController(animated: true)
// Objective-C
[self.navigationController popViewControllerAnimated:YES];
返回到根视图控制器:
// Swift
self.navigationController?.popToRootViewController(animated: true)
// Objective-C
[self.navigationController popToRootViewControllerAnimated:YES];
(感谢Objective-C的回答。)
模态视图控制器
模态显示View Controller时,您可以通过调用将其从第二个View Controller中消除
// Swift
self.dismiss(animated: true, completion: nil)
// Objective-C
[self dismissViewControllerAnimated:YES completion:nil];
该文件说,
呈现视图控制器负责解散其呈现的视图控制器。如果您在呈现的视图控制器本身上调用此方法,则UIKit会要求呈现的视图控制器处理撤消。
因此,它可以使呈现的视图控制器自行调用它。这是一个完整的例子。
代表们
OP的问题在于使用委托来消除视图的复杂性。
到目前为止,我不需要使用委托,因为我通常有一个导航控制器或模态视图控制器,但是如果以后确实需要使用委托模式,我将添加一个更新。
presentingViewController
几乎是无用的,因为它将引用UINavigationController
ifself
嵌入其中。在这种情况下,您将一无所获presentingViewController
。但是,[self dismissViewControllerAnimated:completion]
在这种情况下仍然有效。我的建议是继续使用它,直到Apple修复它为止。