10

私がしたい既存のビューの上に:a)ユーザーに画面を表示しますb)次にSMSを送信します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 作成ビューが表示されるのを確認できます。SMS が送信されたら、SMS 作成ビューを閉じるためにこれを行っています

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

しかし、presentViewController を使用して別の画面をユーザーに表示しようとしても、何も起こりません。これが必要な理由がわかりません。私が気付いていないことがありますか?

実際、SMS ビューの前と後の画面は、テキストが異なることを除いて同じです。したがって、最も簡単な一連の手順は次のようになります。

a) ビュー コントローラーにテキスト "abc" を表示する b) SMS コントローラーを表示する c) SMS が送信されたら、SMS コントローラーを閉じる d) IBOutlet を使用して最初のビュー コントローラーのテキストを更新する e) 最初のビュー コントローラーを閉じる。

ただし、前述のように、最初のビュー コントローラーを閉じないと、SMS コントローラーは表示されません。私の主な質問は、最初のビュー コントローラーの上に SMS コントローラーを表示するにはどうすればよいかということです。

4

4 に答える 4

12

どちらか一方が閉じた後に一方を提示できます。

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];
于 2013-01-12T15:50:29.623 に答える
0

iOS では、2 つのモーダル ビューを同時に開くことはできません。モーダル ビューは、最上位ビューになるように設計されています。

于 2012-04-23T21:12:37.847 に答える