1

UIScrollView サブクラス内に UIViewController のビューがあります。問題は、デバイスを回転させたときに UIViewController が wi​​llRotate デリゲートを呼び出していないことです。これはおそらく、UIView に回転デリゲートが実装されていないためです。これを解決する最善の方法は何ですか?

基本的に構造は、UIScrollView を持つ MainViewController があります。この UIScrollView 内には、一連の UIViewController のビューであるサブビューがあります。現在の問題は、回転時に回転呼び出しを受けていないことです。これに対処する 1 つの方法は、MainViewController からそれぞれの UIViewController に委任することです。これを解決するためのより良い/エレガントな方法はありますか?

MainViewController ではなく、UIScrollView からサブビューとして追加しています。UIView から UIViewControllers を含めることはできません。間違っていたら訂正してください

4

2 に答える 2

1

MVC パターンに反対していると思います。ビュー内にコントローラーを配置することはできません。代わりに、ビューとユーザーの入力の間の通信を仲介するコントローラーが必要です。あなたの場合、スクロールビューを のように設定してself.viewからMainViewController、viewcontrollers ビューをサブビューとして追加できます。

于 2012-06-08T00:30:48.233 に答える
0

コメントに投稿したビデオをご覧ください: https://developer.apple.com/videos/wwdc/2011/?id=102

これは、すべてのロジックを 1 つのビュー コントローラーに結合したり、SDK に組み込まれたものに委任を使用したりするのではなく、探している設計であるビュー コントローラーのコンテインメントの簡単な要約です。

ビューコントローラーにはビューがあり、そのビューとおそらくそのサブビューのいくつかにロジックを提供します。

複雑なビュー階層と、その階層内の特定のビューの複雑なロジックがあり、ビューがそれを制御する独自のビューコントローラーとそのサブビューを持つことを保証する場合があります。

MainViewController があり、そのビューが UIScrollView (またはサブクラス) であるとします。そのスクロールビュー内には、独自のコントローラーを保証する複雑なビューの組み合わせがある場合があるため、スクロールビューのサブビューをビューとして持つクラス SubViewController があります。

SubViewController では、サブビューのロジックを実装してレイアウトの変更を処理するために、回転および外観メソッドのコールバックが正しく機能する必要があります。

    [mainViewControllerInstance addChildViewController:subViewControllerInstance];

ちょっと待って。サブビューはまだビュー階層にありません。

    [mainViewControllerInstance.view addSubView:subViewControllerInstance.view];

2 つのビュー コントローラーの有効なビュー コントローラー階層を正常に作成し、それらのビューの関連するビュー階層をセットアップしました。

MainViewController がそれらを SubViewController に転送するため、適切なコールバックが機能するようになります。

編集:

View Controller コンテインメントの概要については、次のドキュメントを参照してください: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

于 2012-06-08T19:21:13.307 に答える