1

iOS SDKに付属しているアクションシートなど、画面全体に表示されないカスタムモーダルダイアログが必要になることがよくあります。このダイアログは、インターフェイスの回転など、いくつかのトリッキーなシナリオと条件を処理する必要があり、ユーザーの選択を処理するための多くのコードを運ぶこともよくあります。したがって、ダイアログを通常のビューとコントローラーの組み合わせとして構築し、UIで一級市民のように機能させることが非常に望ましいようです。

システムモーダルコントローラーAPI(presentModalViewController:animated:)は、この点で非常に制限されています。たとえば、モーダルコントローラーの下にコントローラーを非表示にすることを要求し、事前定義されたアニメーションを使用するように強制します。

コントローラー包含APIは、画面上で一度に複数のビューを可能にし、それぞれが異なるコントローラーによって制御されるため、非常に有望に見えます。(これは、通常のビューコントローラーの上にあるモーダルダイアログの状況です。)しかし、私が知っているUINavigationControllerように、標準のコンテナーコントローラー(のような)との相互作用は不安定です。

フルスクリーンではないモーダルダイアログを通常のビューコントローラーとして維持し、UIの他の部分とうまく連携させることを可能にする実用的なテクニックを持っている人はいますか?

4

1 に答える 1

0

絶対にView Controllerにしたい場合は、iOS 5で導入されたcontainment APIを使用する必要があります.これは、すでにいじられているように聞こえます. 私はあなたに完全に同意します-それは一種の岩が多いので、通常は別のアプローチを選択します.

NSObject をサブクラス化するコントローラーを作成し、interfacebuilder にオブジェクトとして追加します。次に、container- と contentView の両方を持つようにコントローラーをセットアップします。containerView をパラメーターとして受け取る初期化メソッドを作成し、そのメソッドの viewWillAppear で通常行うことを行います。初期化メソッドは、containerView をモーダル コントローラーに渡す役割を担うビュー コントローラーから呼び出します。

初期化されると、モーダル コントローラーはそのコンテナー ビューとコンテンツ ビューを担当します。モーダル コントローラーを閉じる必要がある場合は、単にそれらをスーパービューから削除します。

これは、iPad アプリのメイン ビュー コントローラーから呼び出すメソッドです。無関係なものからの要約:)

- (IBAction)showAddProduct:(UIButton *)sender {
  UIView *containterForAddProduct = self.darken;
  containterForAddProduct.alpha = 0;
  [self.view addSubview:containterForAddProduct];
  [self.addEditProductController beginAddingProductInContainerView:containterForAddProduct andManagedObjectContext:self.gridController.managedObjectContext];
}
于 2012-05-09T10:17:58.890 に答える