iOS SDKに付属しているアクションシートなど、画面全体を満たさないカスタムモーダルダイアログが必要なことがよくあります。このダイアログでは、インターフェイスのローテーションなどの複雑なシナリオや条件を処理する必要があります。また、多くの場合、ユーザーの選択肢を処理するためのコードが多く含まれています。したがって、通常のビュー+コントローラの組み合わせとしてダイアログを構築し、UIのファーストクラスの市民のように機能させることが非常に望ましいようです。通常のビューコントローラとしてカスタムモーダルダイアログを設計するにはどうすればいいですか?
システムモダルコントローラAPI(presentModalViewController:animated:
)は、この点でかなり制限されています。たとえば、コントローラをモーダル1の下に隠しておき、あらかじめ定義されたアニメーションを制御器で使用する必要があります。
コントローラー格納APIは、画面上で複数のビューを一度に許可し、それぞれ異なるコントローラーによって管理されるため、非常に有望です。 (これは、通常のView Controllerの上にモーダルダイアログを置いた場合とまったく同じです。)しかし、標準のコンテナコントローラ(UINavigationController
など)との相互作用は、岩です。as I have found outです。
非フルスクリーンのモーダルダイアログを通常のビューコントローラとして使用し、UIの残りの部分とうまくやり取りできるようにするテクニックがありますか?
欠点は、そのようなコントローラはコントローラ階層の一部ではないため、ローテーションおよびアピアランスコールを受信しないことです。これは私が避けようとしていることですが、 'presentModalViewController:animated:'を使って提示されるように、モーダルダイアログをUIの通常の部分にするのが大好きです。 – zoul
親ビューコントローラと一緒に回転させたい場合は、自動的にそれを行うことに問題はありません。しかし、親ビューコントローラとは異なる方法で動作させたい場合は、自分自身でwillRotateのメソッドを実装し、親のviewcontrollersデリゲートメソッドから呼び出す必要があります。 –
それは、私はビューのコンテンツを完全に交換できるようにしたいのですが、一般的には、通常のビューコントローラーでできることは何でもできます。親ビューコントローラからのすべての情報とコールバックを手動で中継するので、私はいくつかの "システム"ソリューションを考え出しています。包含APIは、 'UINavigationController'の問題でなければ、非常に* closeです。 – zoul