呈现的视图控制器也可以是呈现视图控制器吗?

时间:2012-04-23 21:11:03

标签: ios cocoa-touch uikit

在现有视图的顶部,我想: a)向用户显示屏幕 b)然后发送短信 c)向用户显示另一个屏幕。

对于a)我这样做:

[[UIApplication sharedApplication].delegate.window.rootViewController presentViewController: firstController animated: NO completion:nil];

和b)我正在做同样的事情,除了这是一个不同的vc当然是一个MFMessageComposeViewController。

然而,为了使b)出现,我首先必须使用以下方法解除第一个视图控制器:

   [[UIApplication sharedApplication].delegate.window.rootViewController dismissViewControllerAnimated:NO completion: nil];

到目前为止,我可以看到第一个视图出现,然后看到SMS撰写视图出现。 发送短信时,我这样做是为了解除短信撰写视图

   [[UIApplication sharedApplication].delegate.window.rootViewController dismissViewControllerAnimated:NO completion: nil];

但是当我尝试使用presentViewController向用户呈现另一个屏幕时没有任何反应。我不明白为什么会这样,有什么我不知道的吗?

实际上SMS视图之前和之后的屏幕是相同的,除了它们有不同的文本,所以最简单的步骤顺序是:

a)使用文本“abc”显示视图控制器 b)出示SMS控制器 c)当发送SMS时,解除SMS控制器 d)使用IBOutlet更新第一个视图控制器中的文本 e)关闭第一个视图控制器。

然而如前所述,如果我不解除第一个视图控制器,则不会出现SMS控制器。所以我的主要问题是如何在第一个视图控制器上显示SMS控制器?

3 个答案:

答案 0 :(得分:10)

你可以一个接一个地关闭:

UIViewController *rvc = [UIApplication sharedApplication].delegate.window.rootViewController;
[rvc dismissViewControllerAnimated:NO completion:^{
    [rvc presentViewController: secondController animated: NO completion:nil];
}];

或者提出另一个:

UIViewController *rvc = [UIApplication sharedApplication].delegate.window.rootViewController;
UIViewController *pvc = rvc.presentedViewController;  // you may need to loop through presentedViewControllers if you have more than one
[pvc presentViewController: secondController animated: NO completion:nil];

答案 1 :(得分:0)

iOS不允许您同时打开两个模态视图。模态视图旨在成为最顶层的视图。

答案 2 :(得分:0)

就我而言,我可以直接访问呈现的视图控制器,所以在这种情况下:

self.present(viewControllerToPresent, animated: true) {
    //It's presented.
}