当同一个视图控制器,在同一个时间,只能present一个另外的视图控制器,如果当前的VC已经present了,再次present一个VC时,就会提示失败;如果想继续present,就必须将原来present的控制器dismiss。
控制器的两个可能很多人都没注意的两个属性presentedViewController和presentingViewController;他们分别是被present的控制器和正在presenting的控制器。比如说, 控制器A和B,[A presentViewController B animated:YES completion:nil]; 那么A相对于B就是presentingViewController,B相对于A是presentedViewController,即
B.presentingViewController = A;
A.presentedViewController = B;
if(self.presentingViewController.presentingViewController) {
self.presentingViewController.view.alpha=0;
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}else{
[self dismissViewControllerAnimated:YES completion:nil];
}
可以作为退出当前控制器,
比如说,现在有个C界面,C界面被显示出来,可能有两种情况,一是modal出来的,另外一种是push出来的,这时候就可以通过当前界面对象的presentingViewController属性来判断到底属于哪种情况,如果是nil,表示是UINavigationController对象push过来的,如果不是则是modal过来的。