2012-04-23 236 views
7

在我想要的現有視圖之上:a)向用戶顯示一個屏幕 b)然後發送一個SMS c)向用戶顯示另一個屏幕。可以呈現視圖控制器也是一個呈現視圖控制器?

對於)我這樣做:

[[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控制器?

回答

0

的iOS不允許你在同一時間打開兩個模式的看法。模態視圖被設計爲最頂層的視圖。

+3

但是現在更的遺留術語,並注意我如何使用presentViewController而不是presentModalViewController。這種情況下,呈現的視圖控制器不能成爲呈現視圖控制器? – Gruntcakes 2012-04-23 21:36:28

8

您可以在另一個關閉之後存在一個:

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]; 
iOS 5中(我使用的)「莫代爾」
+0

通過以上第二種方法是否有任何更改從Appstore拒絕應用程序..? – g212gs 2016-04-28 14:25:18

+1

如果您要呈現/解散視圖控制器,爲什麼應用商店會關心它? – 2016-04-28 15:46:48

+0

原因通常我們一次只能顯示一個viewController, 但是我可以通過使用你的技術來實現我想要的。 – g212gs 2016-04-29 07:30:02