0

私のアプリケーションはUIWindow以外で始まります。私はプログラムでself.windowにビューコントローラを追加します。application:didFinishLaunchingWithOptions:です。私は、バックグラウンド・プロセスをキックオフと同時にUIWindowにUITabBarControllerをプログラムで追加した後の回転のサポートを失う

myViewController = [[UIViewController alloc] init:...]; 
... 

[self.window addSubview:myViewController.view]; 
[self.window makeKeyAndVisible]; 

[NSThread detachNewThreadSelector:@selector(startupOperations) toTarget:self withObject:nil]; 

このようなstartupOperations見て何か:

NSAutoreleasePool *threadPool = [[NSAutoreleasePool alloc] init]; 

// Load data 
... 

// When your done, call method on the main thread 
[self performSelectorOnMainThread:@selector(showMainViewController) withObject:nil waitUntilDone:false]; 

// Release autorelease pool 
[threadPool release]; 

showMainViewControllerがmyViewControllerを削除するには、UITabBarControllerを作成して、それを設定し、ウィンドウのメインビュー:

[self.myViewController.view removeFromSuperview]; 
self.myViewController = nil; 

tabBarController = [[UITabBarController alloc] init]; 
... 

[self.window addSubview:tabBarController.view]; 
[self.window makeKeyAndVisible]; 
件の

質問:

すべてのビューコントローラはshouldAutorotateToInterfaceOrientation:にYESを返しています。 myViewControllerの回転は正常に機能しますが、tabBarControllerが表示されると回転が停止し、インターフェイスが[ポートレート]に表示されます。この行動の背後にある理由は何ですか?

また、iOS 4.xでは、UIWindowにはrootViewControllerプロパティがあります。このプロパティの役割は何ですか?新しいテンプレートは[self.window addSubview:...]の代わりにrootViewControllerを使用します。何故ですか?

答えて

1

Pretty strange。私は初期のコントローラを削除し、タブバーコントローラのビューをサブビューとして追加した後、単純なタブバーベースのプロジェクトとオートローテーションで "ビューフロー"を効果的に動作させようとしました。

動作しなかった唯一の条件は、self.windowに削除しなかった2番目のサブビューが含まれていた場合です。あなたはself.window.subviewコンテンツが何であるかを

[self.window addSubview:tabBarController.view]; 

を実行するときには、現時点では確認してもらえますか?

それでも問題が解決しない場合は、UITabBarControllerUITabBarをどのように初期化すればよいですか?

ルートビューコントローラは、ウインドウのコンテンツビューを提供します。あなたはrootViewController言うように、あなたの2番目の質問については

は、ウィンドウに属するすべてのビューのルートコントローラです。このプロパティにビューコントローラを割り当てる(プログラムまたはInterface Builderを使用)と、ビューコントローラのビューがウィンドウのコンテンツビューとしてインストールされます。ウィンドウに既存のビュー階層がある場合、古いビューは新しいものがインストールされる前に削除されます。

Source

あなたはまた、それを使用していますが、「手動」サブビューを追加して、後でこのプロパティを変更する場合は、そうでない場合は、applicationDidFinishLaunchingですでにそれを割り当てるの世話をすることができ、それが削除されませんあなたが明示的に追加したサブビュー。

+0

ありがとう。実際にはUIViewアニメーションブロックを使用してmyViewControllerをフェードアウトし、tabBarControllerをフェードインしていました。その結果、ウィンドウには複数のビューが含まれていたという点がありました。これが問題の原因となっています。 – Mustafa

関連する問題