2016-10-14 9 views
0

私のアプリの最初の画面はログイン画面で構成されています。私はAppDelegateからログイン画面を表示しています。 ログイン画面が表示され、シミュレータの次の画面に移動できます。しかし、それはデバイス上で動作しません。dismissViewControllerAnimated issue

デバイスでは、メイン画面が1秒間表示され、ログイン画面が表示されます。私は[self.window.rootViewController dismissViewControllerAnimated:YES completion:nil];[self.window.rootViewController presentViewController:self.navigationController animated:YES completion:nil];の順番を変更しようとしましたが、どちらもうまくいきません。

私はiOS 9.0 iPad(デバイス)で動作しています。しかし、シミュレータではすべてうまくいくようです。

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

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

    self->_loginViewController = [[LoginViewController alloc] initWithNibName:nil bundle:nil];  
    self.window.rootViewController = nil; 
    self.window.rootViewController = self->_loginViewController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

- (void)loginUser { 

    if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { 
     //load xib for iPad 
     mainVC = [[MainVC alloc] initWithNibName:@"MainVC~ipad" bundle:nil]; 

    } else if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) { 
     //load xib for iPhone 
     mainVC = [[MainVC alloc] initWithNibName:@"MainVC~iphone" bundle:nil]; 
    } 

    self.navigationController = nil; 
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:mainVC]; 

    dispatch_async(dispatch_get_main_queue(),^ { 
    // [self.window.rootViewController.navigationController popViewControllerAnimated:YES]; //not working 

     [self.window.rootViewController dismissViewControllerAnimated:YES completion:nil]; //not working 
     [self.window.rootViewController presentViewController:self.navigationController animated:YES completion:nil]; 

     //not working 
     // [self.window.rootViewController.presentingViewController dismissViewControllerAnimated:YES completion:^{ 
     //  [self.window.rootViewController presentViewController:self.navigationController animated:YES completion:nil]; 
     // }]; 

    }); 
} 

答えて

0

まず、ウィンドウのrootControllerとしてLoginViewControllerを設定していますか。ログイン方法では、ここに何も表示されていないときにコントローラを終了しようとしています(他のコントローラを提示していないと仮定します)。その行を削除してナビゲーションコントローラを表示するだけで済みます。

+0

私はこの '[self.windowを削除しました。これを保持していたのは、dispatch_async(dispatch_get_main_queue()、^ { [self.window.rootViewController presentViewController:self.navigationController animated:YES complet]イオン:nil]; }); '。しかし、それはまだ役に立たない。 – Swift

0

この目的のために、私は通常rootViewControllerを変更します。

[self.window.rootViewController dismissViewControllerAnimated:YES completion:nil]; //not working 
[self.window.rootViewController presentViewController:self.navigationController animated:YES completion:nil]; 

を:あなたのユーザーが交換するログオンしたあなたのケースでは、

self.window.rootViewController = self.navigationController; 

し、ユーザーのログアウトの操作を行います。

self.window.rootViewController = self.loginViewController;