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

Gru*_*kes 8 cocoa-touch uikit ios

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

对于a)我这样做:

[[UIApplication sharedApplication].delegate.window.rootViewController presentViewController: firstController animated: NO completion:nil];
Run Code Online (Sandbox Code Playgroud)

并且对于b)我正在做同样的事情,除了这是一个不同的vc当然是一个MFMessageComposeViewController.

但是为了使b)出现,我首先必须使用以下方法关闭第一个视图控制器:

   [[UIApplication sharedApplication].delegate.window.rootViewController dismissViewControllerAnimated:NO completion: nil];
Run Code Online (Sandbox Code Playgroud)

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

   [[UIApplication sharedApplication].delegate.window.rootViewController dismissViewControllerAnimated:NO completion: nil];
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用presentViewController向用户呈现另一个屏幕时没有任何反应.我看不出有什么理由应该这样,有什么我不知道的吗?

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

a)呈现带有文本"abc"的视图控制器b)呈现SMS控制器c)当发送SMS时解除SMS控制器d)使用IBOutlet更新第一视图控制器中的文本e)关闭第一视图控制器.

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

Aar*_*ger 10

您可以在另一个关闭后呈现一个:

UIViewController *rvc = [UIApplication sharedApplication].delegate.window.rootViewController;
[rvc dismissViewControllerAnimated:NO completion:^{
    [rvc presentViewController: secondController animated: NO completion:nil];
}];
Run Code Online (Sandbox Code Playgroud)

或者在另一个上面呈现:

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];
Run Code Online (Sandbox Code Playgroud)

  • 为什么应用商店会关心你是否展示/关闭视图控制器? (2认同)

Jee*_*har 0

iOS 不允许您同时打开两个模式视图。模态视图被设计为最顶层的视图。

  • 然而,在 iOS 5(我正在使用)中,“modal”现在更多地是一个遗留术语,请注意我如何使用presentViewController而不是presentModalViewController。呈现视图控制器是否不能反过来成为呈现视图控制器? (4认同)