iPhoneでUIViewControllerをポップアップとして表示する
質問
このよくある繰り返しの質問に対する完全で決定的な回答はありませんので、ここで質問と回答をさせていただきます。
多くの場合、私たちは
UIViewController
を画面全体に表示する必要があります。
Apple は、いくつかの似たような
UIViewController
のような
UIAlertView
や、TwitterやFacebookのシェアビューコントローラーなどです。
カスタムコントローラでこの効果を得るにはどうしたらよいでしょうか?
どのように解決するのですか?
注:この解決策はiOS 8で壊れています。新しい解決策を早急に掲載します。
ストーリーボードを使用して回答しますが、ストーリーボードなしでも可能です。
-
初期値です。 2つの
UIViewController
を作成する。-
とすると
FirstViewController
は正常でSecondViewController
がポップアップになります。
-
とすると
-
モーダルセグエです。 置く
UIButton
をFirstViewControllerに配置し、この上にセグエを作成します。UIButton
からSecondViewController
をモーダルセグエとする。 -
透明にする。 次に
UIView
(UIView
というのは、デフォルトで作成されるUIViewController
を含む)のSecondViewController
で、その背景色をクリア色に変更します。 -
背景をDimにする。 背景を薄くする
UIImageView
でSecondViewController
で、画面全体を覆い、その画像を半透明な画像にする。サンプルはここから入手できます。UIAlertView
背景画像 -
ディスプレイのデザイン。 次に
UIView
を追加して、表示したいデザインを自由に作ってください。以下は、私のストーリーボードのスクリーンショットです。-
ここでは、ログインボタンにセグエを追加しています。
SecondViewController
をポップアップとして開き、ユーザ名とパスワードを尋ねる。
-
ここでは、ログインボタンにセグエを追加しています。
-
重要です。 さて、そのメインステップ。私たちが欲しいのはその
SecondViewController
がFirstViewControllerを完全に隠さないようにしたいのです。我々はクリアカラーを設定しましたが、これだけでは十分ではありません。デフォルトではモデル表示の後ろに黒が追加されます。FirstViewController
. 他の場所に追加することもできますが、セグエの前に実行する必要があります。[self setModalPresentationStyle:UIModalPresentationCurrentContext];
-
解散してください。 いつ解散させるかは、ユースケースによります。これはモーダルプレゼンテーションなので、モーダルプレゼンテーションのために行うことを解除するために、私たちは行います。
[self dismissViewControllerAnimated:YES completion:Nil];
以上......。
どんな提案やコメントでも歓迎します。
デモの様子。 あなたはここからデモのソースプロジェクトを取得することができます。 ポップアップデモ
新しい
: 誰かがこのコンセプトで非常に素晴らしい仕事をした。
MZFormSheetController
新しい
: このような機能を得るためのコードをもう一つ見つけました。
KLCPopup
iOS 8 アップデート : このメソッドはiOS 7とiOS 8の両方で動作するようにしました。
+ (void)setPresentationStyleForSelfController:(UIViewController *)selfController presentingController:(UIViewController *)presentingController
{
if (iOSVersion >= 8.0)
{
presentingController.providesPresentationContextTransitionStyle = YES;
presentingController.definesPresentationContext = YES;
[presentingController setModalPresentationStyle:UIModalPresentationOverCurrentContext];
}
else
{
[selfController setModalPresentationStyle:UIModalPresentationCurrentContext];
[selfController.navigationController setModalPresentationStyle:UIModalPresentationCurrentContext];
}
}
このメソッドはprepareForSegueデリゲート内で次のように使用することができます。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
PopUpViewController *popup = segue.destinationViewController;
[self setPresentationStyleForSelfController:self presentingController:popup]
}
関連
-
[解決済み】ウィンドウ階層にないビューを持つUIViewControllerでUIViewControllerを表示しようとする
-
EXC_BAD_ACCESS (code=2, address=0x0)
-
[解決済み] Xcode 6.3 - 現在の iOS Development 証明書または保留中の証明書要求がすでにあります。
-
[解決済み] 奇妙な不要なXcodeログを隠す
-
[解決済み] iPhone UITextField - プレースホルダーの文字色を変更する
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み] セキュリティで保護されたWebサービスにもアクセスするiOSアプリで、Facebook認証を行うためのデザイン
-
[解決済み】iPhoneアプリケーションにカスタムフォントを埋め込むことはできますか?
-
[解決済み】iOSのUIViewControllerのライフサイクルを理解するために
-
[解決済み] UIViewControllerの上にclearColor UIViewControllerを表示する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] Objective-CでNSNotificationCenterを通してメッセージを送受信する?
-
[解決済み] iOSシミュレータでスクリーンショットを撮る
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] iphoneアプリのベータテストはどのように行うのですか?
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?
-
[解決済み] ぼかしの入ったオーバーレイビューの作成
-
[解決済み] Cocoapods警告 - CocoaPodsがプロジェクトの基本構成を設定しなかった理由は、プロジェクトに既にカスタム構成が設定されているためです。