2

ビューにサブビューを追加しています。すべて正常に動作します。私のアプリは自動回転をサポートしています。デバイスを回転すると、親ビュー shouldautorotate/willanimate が呼び出されますが、サブビュー shouldautorotate/willanimate が呼び出されません。このため、サブビューの UI コンポーネントの位置を設定できません。

viewController = [[abcController alloc] initWithNibName:@"abcController" bundle:nil];
[self.view addSubview:viewController.view];

どんなポインタでも役に立ちます。

4

3 に答える 3

3

これは、あるビュー コントローラーから別のビュー コントローラーのビュー ツリーにビューを機能的に追加できず、2 番目のビュー コントローラーがメッセージを受け取ることを期待できないためです。

どちらかにする必要があります

  1. 追加したビューを最初のUIViewController(2 番目ではないUIViewController)の一部にする
  2. メソッドを使用してaddChildViewController、2 番目のビュー コントローラーを最初のビュー コントローラーの子として追加します (これにより、これらのメッセージを転送できるようになります)。
于 2013-01-08T14:35:02.317 に答える
1

ビューに適切な自動サイズ変更設定がありません:

viewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

これとは別に、 が呼び出されていないという意味であればabcControllershouldautorotate/willanimateそれは正常な動作です。

メイン コントローラーは何らかの封じ込めロジックを実装shouldautorotate/willanimateし、コントローラーに転送する必要があります。つまり、メインコントローラーはインスタンスを呼び出すことができますshouldautorotate/willanimateabcController、それを認識している必要があります。余談ですが、Apple はこのようにすることを提案していませんが、iOS4 をサポートしたい場合はこれが唯一の方法です。

または、 iOS>5 用のUIViewController Containmentを使用することもできます。

これは、次の 2 つの方法を使用することに頼っています。

@interface UIViewController (UIContainerViewControllerProtectedMethods)

 - (void)addChildViewController:(UIViewController *)childController;
 - (void)removeFromParentViewController;

@end

ここでは、優れたチュートリアルを見つけることができます。これは iOS4 では機能しません。

于 2013-01-08T14:32:04.280 に答える
0

ビュー コントローラーが shouldautorotate/willanimate 呼び出しを受信するには、「ビュー階層」にある必要があります。したがって、ビューをサブビューとして追加するだけでは、これらのメソッドは呼び出されませんが、このビュー コントローラーをナビゲーション コントローラーにプッシュするか、モーダル ビュー コントローラーとして提示するか、addChildViewController メソッド (iOS 5 以降の場合) を使用すると、ビュー コントローラーが呼び出されます。それらのメッセージを受け取ります。ビューをサブビューとして追加するだけの場合は、autoresizingMask を使用できます。(しかし、カスタムビューだけでなくビューコントローラーを作成するポイントがわかりません)

于 2013-01-08T14:38:00.210 に答える