2010-11-23 10 views
2

この質問のタイトルにもかかわらず、私はUIViewControllerをUIViewの内部に配置することはできません。UIViewController "inside" iPadのUIView

Appleのドキュメントによると、UIViewControllerはiPhoneアプリケーションのフルスクリーンを制御します。しかし、iPad上では、ポップオーバーやスプリットビューのコンテンツやフルスクリーンのコントロールにも使用できます。

私の設計では、それぞれ独自のUIViewControllerを持つ非常に複雑なビューが画面中央のiPhoneサイズの四角形で入れ替えられています。私がポップオーバーを使用するのであれば、これは自明ではありますが、矢印またはそれに付随する黒い境界が必要ではありません。

私はこのような状況に対処するための二つの可能性を考えています。新しいUIWindowに

  • 置き、それらのビューのためのUIViewControllerから継承しません
  • 使用コントローラクラスをビューコントローラを

今後どのような頭痛を引き起こす可能性が最も低いのは?もし私が考えていないより良い方法があれば教えてください。

答えて

2

。 UI階層内で実際のView Controllerを任意にネストすることができないということは、SDKの不幸な不公平ですが、実際の複雑さの偽コントローラを持っていても管理するのが妥当であることがわかりました。必要に応じて実際のルートコントローラからの重要なメッセージを確認し、実際のビューコントローラと同じようにコードを構成します。これは基本的にAppleの推奨事項です。

このようなサブ画面の管理可能なビューがたくさんある場合、おそらくNSObjectを継承したきれいな柔軟なMyViewControllerクラスを構築し、次に継承するMyBaseViewControllerを構築することができますMyViewControllerを生成する方法を知っているUIViewControllerからすべてのメッセージを適切に設定します。 (私はまだこのレベルの抽象化を必要としていませんでした。)

サブ画面サイズのUIWindowを使用することは標準的な解決策ではありません。同様に、先に進んでUIViewControllerを使用しないでください。あなたがそうした場合、時には振る舞い、時折誤動作し、その壊れやすい相互作用を分類するのに多くの時間を費やすことに気付くでしょう。

+0

外部ライブラリから取得した特定のView Controllerでは、これは機能しません。最も良い例は、アドレス帳またはイベントキットのフレームワークです。実際のUIViewControllerを管理する必要があります。私はそのためのレシピがあることを願っています。結局のところ、これは正確に 'UIPopOver'がしていることです! –

0

あなたは、私は次のことを提案し、個人的な経験からポップオーバー

+0

私が言ったように、私はそのスタイリング(黒い枠線と矢印)のためにポップオーバーを使いたくありません。 – titaniumdecoy

1

内UINavigationControllerを置くことができます。

各「論理ユニット」、またはモジュールの場合は、例えばメッセージリスト、メッセージ作曲ビューやフォルダをリスト;独自のUIViewControllerおよび.nibファイルを作成します。

各モジュールのコードを分けておくことで、他のモジュール間の明確なインターフェースを提供することによって、他のモジュールの詳細や詳細を知る必要はありません。

すべてのビューのすべてのインスタンスと、それらがどのように表示されるかを管理する1つの「メインコントローラ」があります。

私にとっては、特にiPhoneとiPadアプリで同じコードベースのほとんどを使用したい場合は、頭痛を大幅に軽減しました。私はUIViewControllerから継承しないコントローラクラスを使用

Overview

+0

これは問題ありませんが、(ポップオーバーを使用せずに)画面を満たさない矩形内に独自のUIViewControllerを持つビューを表示するにはどうすればよいですか? – titaniumdecoy

+0

各UIViewControllerには "view"プロパティがあります。これは、各 "モジュール"の.nibファイルの関連するUIViewに接続されています。この特定のビューを別のビューに追加する場合は、「[myMainView addSubview:myModuleController.view]」を呼び出すことができます。その後、 "frame"プロパティを使用して、追加したばかりのビューのrectを定義します。 – BastiBen

関連する問題