2013-07-18 5 views
5

私の要件は、UITabBarControllerがrootviewcontrollerであり、初めてアプリケーションを起動したときに、UINavConの中にあるログインプロシージャを表示したいのですが、presentViewControllerで表示しています。[self.window makeKeyAndVisible]できます。 rootviewcontrollerを設定する前に呼び出さなければならない

UITabBarControllerを初めて表示したいのではなく、ログインUINavConがモーダルとしてどのようにポップしているかを知りたくありません。

初めてアプリが起動すると、UINavConが表示されるはずです。だからここに私のコードです:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

[self.window makeKeyAndVisible];//is it correct to call it here? 

LoginVC *loginObj = [[LoginVC alloc]init]; 

self.navigationController = [[UINavigationController alloc] initWithRootViewController:cellPhoneNumber]; 

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

self.window.rootViewController = self.tabBarController; 

[self.tabBarController presentViewController:self.navigationController animated:NO completion:^{}]; 

return YES; 
} 

私は右uiwindowallocinit後に2行目[self.window makeKeyAndVisible];を呼び出しています。それは正しいですか、またはビューコントローラがイベントやオリエンテーション通知を受信しないなどの問題が発生する可能性がありますか?

答えて

4

いつでも呼び出すことができます。これを呼び出すと、ウィンドウのZ-インデックスとスクリーンプロパティに影響します。 設定されている特定のコンテンツに依存しません。

+0

返信いただきありがとうございます、私たちは通常、外部出力の場合には、我々は別のuiwindowを持っている私たちは通常、1つのuiwindowを持っていることを教えてくれますか?私の場合のようにデフォルトではuiwindowは0のインデックスにあり、appleはこれを "これは受信者をメインウィンドウにして他のウィンドウの前に表示する便利な方法です"と言う。他の窓の前ではどういう意味ですか? –

+0

何もあなたは複数のウィンドウを持つことを止めません。例えばあなたはすでに2つ以上の..あなたとキーボードのウィンドウを持っています! –

5

実装を使用して、コードが機能しているかどうかは言及していません。とにかく私は最近、ログイン・コントローラを表示してからログインした後にtabBarControllerを表示する必要があるので、私の実装を共有するだけで同様の実装を行っています。

  1. ログインコントローラを作成し、didFinishLaunchingメソッドで提示してください。その後

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    LoginController *loginCObj= [[[MainScreenController alloc]init]autorelease]; 
    UINavigationController *navigationControllerObj = [[[UINavigationController alloc]initWithRootViewController:loginObj]autorelease]; 
    self.window.rootViewController = navigationControllerObj; 
    [self.window makeKeyAndVisible]; 
    
  2. 成功したログインのログイン・ビュー・コントローラでは、次のようにメソッドを追加し、あなたのappDelegateファイルには、ログインコントローラで

    AppDelegate *appDel = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [appDel applicationLoggedInSuccesfully]; 
    

    をappDelegateパブリックメソッドを呼び出します。

    -(void)applicationLoggedInSuccesfully{ 
        UINavigationController *nv1 = [[[UINavigationController alloc] initWithNibName:nil bundle:nil]autorelease]; 
        TabController1 *v1 = [[[TabController1 alloc] initWithNibName:nil bundle:nil]autorelease]; 
        [nv1 pushViewController:v1 animated:NO]; 
    
        UITabBarController *tabController = [[[UITabBarController alloc] init]autorelease]; 
        tabController.viewControllers = @[nv1]; 
        tabController.delegate = self; 
        self.window.rootViewController = tabController; 
        [self.window makeKeyAndVisible]; 
    } 
    

あなたがお役に立てば幸いです。

+1

返信ありがとう、私は知りたいことができます[self.window makeKeyAndVisible];いつでも呼び出すことができます。または、最後にコールするか、rootviewcontrollerを設定した後でコールする必要があります。 –

+0

最初に電話する際に問題が見つかりましたか? – HRM

+0

まだ問題はありませんが、うまく動作しているようですが、後でトラブルに巻き込まれたくないので、なぜ知識の増分を求めているのですか? –

関連する問題